Криптография¶
Выполнение функций криптографии в Node.js обеспечивает встроенный в платформу модуль crypto
, который поддерживает алгоритмы для шифрования и расшифровки данных, генерацию сертификатов, хэш-функции и т. д.
Модуль crypto
входит не во все сборки Node.js, поэтому его использование в приложении, запускаемом на разных сервера, может быть не всегда возможным. Чтобы проверить доступность модуля, добавьте следующий код.
1 2 3 4 5 6 7 |
|
Для получения списка поддерживаемых в Node.js алгоритмов шифрования, выполните у экземпляра модуля crypto
функцию getCiphers()
.
1 2 3 |
|
В рамках данной статьи рассмотрены шифрование и расшифровка данных.
Шифрование данных по заданному алгоритму осуществляется в три этапа:
- Создание объекта
Cipher
; - Добавление к созданному объекту данных, которые необходимо зашифровать;
- Завершение процесса шифрования.
Объект Cipher
создается вызовом метода crypto.createCipheriv()
, который принимает три параметра:
- алгоритм;
- ключ;
- вектор инициализации (необязательный).
Обогащение созданного объекта Cipher
данными осуществляется с помощью метода [CipherInstance].update()
, которому можно передать следующие аргументы:
- данные для шифрования;
- кодировка исходных данных (необязательный);
- кодировка возвращаемого методом значения (необязательный).
Завершение процесса шифрования осуществляется вызовом метода final()
, принимающему кодировку зашифрованных данных.
Рассмотрим пример шифрования данных.
cipher.js
1 2 3 4 5 6 7 8 9 10 11 |
|
В зависимости от используемого алгоритма длина вектора инициализации может отличаться.
Теперь рассмотрим, как расшифровать зашифрованные данные. В качестве зашифрованных данных возьмем результат из предыдущего примера. Последовательность действий та же, только вместо метода createCipher()
используется createDecipher()
.
decipher.js
1 2 3 4 5 6 7 8 9 10 11 |
|
Процесс шифрования представляет собой поток. Поэтому пример выше может быть переписан следующим образом.
crypto-stream.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|