Крипто модулът Node.js рационализира процеса на извършване на криптографски операции. Ето как да го използвате.

Криптографията е практика за осигуряване на комуникация и данни чрез преобразуването им във формати, които само упълномощени страни могат да дешифрират.

Node.js крипто module е вграден модул, който предоставя криптографска функционалност на Node.js приложения. Той предлага набор от криптографски възможности, включително криптиране, декриптиране, хеширане, цифрови подписи, сигурно генериране на произволни числа и др.

Тук ще разгледате различните приложения на крипто модула Node.js и как можете да ги използвате, за да защитите вашите приложения.

Хеширане

Хеширането е еднопосочна криптографска техника които можете да използвате, за да трансформирате даден ключ или низ в изход с фиксиран размер, известен като хеш или дайджест.

Хеширането е еднопосочна функция, което означава, че когато хеширате ключ или низ, не можете да получите оригиналната стойност от генерирания хеш.

Крипто модулът Node.js поддържа различни функции за хеширане като SHA-256, SHA-512, MD5 и др.

instagram viewer

Можете да хеширате данни с помощта на крипто модула createHash метод, който приема алгоритъма за хеширане като аргумент. Методът връща a хеш обект, който можете да използвате за хеширане на данните с помощта на актуализация и дайджест методи.

Например:

конст крипто = изискват("крипто");

конст данни = "парола";

// създаване на хеш обект
конст hashAlgo = crypto.createHash("sha256")

// предаване на данните за хеширане
hashAlgo.update (данни);

// Създаване на хеша в необходимия формат
конст хеш = hashAlgo.digest(шестнадесетичен);

конзола.log(`Хеш: ${хеш}`);

В примера по-горе крипто модулът createHash създаде хеширащ обект с sha256 алгоритъм за хеширане. The актуализация метод на хеш обекта взема входните данни и ги хешира. Тогава дайджест методът взема параметър за кодиране, указващ формата на изходната хеш стойност и връща хеша в посочения формат (шестнадесетичен).

Хеширането е полезно за проверка на целостта на данните, съхранение на пароли, цифрови подписи и др.

Генериране на случайни данни

Криптографски сигурни произволни данни често се изискват в криптографията, игрите и тестването за различни случаи на употреба.

В криптографията можете да използвате произволни данни за генериране на ключове, соли и вектори за инициализация за алгоритми за криптиране и декриптиране.

В игрите можете да използвате произволни данни, за да генерирате нива на игра, герои, предмети и други, за да предотвратите измама и да се уверите, че играта не е предвидима.

При тестване можете да го използвате за симулиране на сценарии от реалния свят и крайни случаи.

Можете да генерирате произволни данни, като използвате крипто модула Node.js randomBytes метод. Този метод приема число като аргумент и връща буфер от произволни байтове.

Това число представлява размера на байтовете, които методът ще генерира. Броят обаче не трябва да е по-голям от 2³¹ - 1 (2147483647), което е максималната стойност, която може да бъде представена от 32-битово цяло число със знак.

Например:

конст крипто = изискват("крипто");

// създаване на произволни байтове
конст randomBytes = crypto.randomBytes(32);

// конвертиране в шестнадесетичен
конст randomString = randomBytes.toString("шестнадесетичен");

конзола.log (randomString); //записва случаен низ в конзолата

Кодовият блок по-горе генерира и регистрира произволен низ от 64 шестнадесетични знака (32 байта) в конзолата.

Генерирането на криптографски сигурни произволни данни е важно, защото гарантира, че произволните данни не са предвидими и че нападателите не могат да ги манипулират или отгатнат.

Шифроване и декриптиране в Node.js

Шифроването е процес на трансформиране на обикновен текст в нечетима форма (шифрован текст), използвайки алгоритъм за криптиране и таен ключ.

Дешифрирането е обратното на криптирането. Това е процес на преобразуване на шифрования текст обратно в обикновен текст, като се използва същият алгоритъм за криптиране и ключ.

Крипто модулът Node.js осигурява поддръжка за различни алгоритми за криптиране и декриптиране, включително AES (Advanced Encryption Standard), DES (Data Encryption Standard) и RSA (Ривест–Шамир–Адълман).

Как да шифровате данни в Node.js с помощта на крипто модула

Можете да шифровате данни с помощта на crypto.createCipheriv() метод, който приема алгоритъма за криптиране, секретния ключ и вектора за инициализация като вход. Тайният ключ зависи от алгоритъма за криптиране, който използвате. Например за алгоритъмът aes-256 в ТГС режим, дължината на ключа трябва да бъде 32 байта.

Методът връща a Шифър обект, който можете да използвате за шифроване на данните с помощта на актуализация() и финал() методи. Шифрованите данни обикновено се представят като шестнадесетичен низ или буфер.

Например:

конст крипто = изискват("крипто");

// Генериране на таен ключ за криптиране и декриптиране.
конст secretKey = crypto.randomBytes(32);

// Генериране на вектор за инициализация
конст iv = crypto.randomBytes(16);

// данни за криптиране
конст обикновен текст = „Това е тайно съобщение“;

// създаване на шифрован обект
конст шифър = crypto.createCipheriv("aes-256-cbc", secretKey, iv);

// криптиране на данните
позволявам encryptedText = cipher.update (plainText, "utf-8", "шестнадесетичен");

// финализиране на криптирането
encryptedText += cipher.final("шестнадесетичен");

конзола.log (encryptedText);

Примерът по-горе демонстрира как можете да шифровате обикновен текст, като използвате aes-256 в режим CBC, като използвате крипто модула. Той генерира таен ключ и вектор за инициализация, използвайки crypto.randomBytes метод. След това създава шифрован обект, използвайки crypto.createCipheriv метод и шифрова съобщението с обикновен текст с помощта на шифър.актуализация и шифър.окончателен методи.

Резултатът е шестнадесетичен низ от шифрованото съобщение, което можете да дешифрирате, като използвате същия таен ключ и IV.

Как да дешифрирате данни в Node.js с помощта на крипто модула

Можете да дешифрирате криптирани данни с помощта на крипто модула crypto.createDecipheriv() метод, който приема алгоритъма за дешифриране, секретния ключ и вектора за инициализация като вход. Методът връща a Дешифрирайте обект, който можете да използвате за дешифриране на данните с помощта на Decipher.update() и Decipher.final() методи.

Например:

// създаване на обект Decipher
конст дешифриране = crypto.createDecipheriv("aes-256-cbc", secretKey, iv);

// декриптиране на данните
позволявам decryptedText = decipher.update (encryptedText, "шестнадесетичен", "utf-8");

// финализиране на дешифрирането
decryptedText += decipher.final("utf-8");

конзола.log (decryptedText); // Това е тайно съобщение

Примерът по-горе демонстрира как можете да дешифрирате шифровани данни, като използвате същия алгоритъм, таен ключ и вектор за инициализация, с които сте ги шифровали.

Той създава обект Decipher, използвайки crypto.createDecipheriv метод. След това дешифрира данните с помощта на дешифрирам.актуализация метод, който приема данните, входното кодиране и изходното кодиране като аргументи. Накрая, той завършва процеса на декриптиране с помощта на дешифрирам.окончателен метод. Извикването на този метод гарантира, че обектът Decipher може повече да се използва за дешифриране на данни. Резултатът е обикновен текстов низ.

Шифроването и декриптирането са от решаващо значение за защитата на чувствителните данни и поддържането на тяхната поверителност. Те имат различни реални приложения в електронната търговия, онлайн банкирането, съхранението на данни и др.

Други приложения на крипто модула Node.js

Освен хеширане, генериране на криптографски сигурни произволни данни и криптиране и декриптиране, можете също да използвате Node.js крипто модул за подписване и проверка на цифрови подписи, които помагат да се провери автентичността и целостта на цифровите документи. Освен това можете да използвате крипто модула, за да защитите потоци за предаване на данни, за да предотвратите подправяне на данни и подслушване по време на предаване.