crypto

Библиотека криптографических функций. Упрощает задачи по генерации ключей, вычислению значений хеш-функций и отвечает за аппаратное шифрование. Подключается командой require('crypto').

crypto

Объект для нахождения хэшей и генерации криптостойких ключей по алгоритмам SHA.

Методы

SHA1(message)

Возвращает в виде ArrayBuffer хэш строки message, найденный по алгоритму SHA-1.

var crypto = require('crypto');
var hash = crypto.SHA1('Hello world');
print(hash);
/* 
 * Результат вывода
 * new ArrayBuffer([123, 80, 44, 58, 31, 72, 200, 96, 154, 226, 18, 205, 251, 99, 157, 238, 57, 103, 63, 94])
 */

SHA224(message)

Возвращает в виде ArrayBuffer хэш строки message, найденный по алгоритму SHA-224.

SHA256(message)

Возвращает в виде ArrayBuffer хэш строки message, найденный по алгоритму SHA-256.

SHA384(message)

Возвращает в виде ArrayBuffer хэш строки message, найденный по алгоритму SHA-384.

SHA512(message)

Возвращает в виде ArrayBuffer хэш строки message, найденный по алгоритму SHA-512.

PBKDF2(passphrase, [salt, options])

Возвращает ключ в виде ArrayBuffer, сгенерированный на основе пароля passphrase и соли (для дополнительного усиления пароля) salt. В качестве опций options передаётся объект со свойствами:

  • keySize — размер ключа в 32-х битных (4-х символьных) блоках.
  • iterations — количество проходов алгоритма при генерации ключа.
  • hasher — функция хэширования. Принимает значение 'SHA1,SHA224,SHA256,SHA384 или SHA512.
var crypto = require('crypto');
var password = 'MyStrongPassword';
var salt = 'MyStrongSalt';
 
var secretKey = crypto.PBKDF2(password, salt, {
  keySize: 4,
  iterations: 4,
  hasher: 'SHA256'
});
 
print(secretKey);
/*
 * Результат вывода
 * new ArrayBuffer([150, 156, 110, 142, 15, 126, 245, 228, 246, 206, 45, 5, 54, 174, 254, 31])
 */

Свойства

AES

Объект для аппаратного AES шифрования.

var password = 'MyStrongPassword';
var salt = 'MyStrongSalt';
 
 
// Подключаем библиотеку
var crypto = require('crypto');
 
// Генерируем ключ для шифрования
var secretKey = crypto.PBKDF2(password, salt, {
  keySize: 4,
  iterations: 2,
  hasher: 'SHA256'
});
print('Secret key: ', secretKey);
 
 
// Обратите внимание, что длина шифруемых данных должна быть кратна длине ключа
// По этому мы дополнили строку пробелом в конце
var secretText = 'My secret text! ';
 
 
// Шифруем данные
var encryptedData = crypto.AES.encrypt(secretText, secretKey);
print('Original text: ', secretText);
print('Encrypted data: ', encryptedData);
 
// Дешифруем данные
var decryptedData = crypto.AES.decrypt(encryptedData, secretKey);
print('Decrypted data: ', decryptedData);
 
var decryptedText = '';
for(var c=0; c < decryptedData.length; c++) {
  decryptedText += String.fromCharCode(decryptedData[c]);
}
print('Decrypted text: ', decryptedText);
 
/*
 * Результат вывода в консоль:
 * Secret key:  new ArrayBuffer([158, 14, 146, 192, 65, 202, 100, 235, 182, 198, 169, 96, 177, 191, 247, 188])
 * Original text:  My secret text!
 * Encrypted data:  new ArrayBuffer([147, 111, 232, 25, 214, 98, 23, 244, 82, 2, 175, 18, 38, 84, 233, 65])
 * Decrypted data:  new ArrayBuffer([77, 121, 32, 115, 101, 99, 114, 101, 116, 32, 116, 101, 120, 116, 33, 32])
 * Decrypted text:  My secret text!
 */

Методы

AES.encrypt(message, key, options)

Возвращает зашифрованное сообщение message. Для шифрования используется ключ key типа ArrayBuffer. Длинна ключа 128, 192 или 256 бит. Опции options — объект с полями:

  • iv — вектор инициализации типа Uint8Array и длинной 16 байт. Для его генерации рекомендуется использовать аппаратный генератор случайных чисел.
  • mode — режим шифрования, может иметь значения CBC, CFB, CTR, OFB или ECB.

AES.decrypt(passphrase, key, options)

Функция возвращает дешифрованное сообщение passphrase. Для дешифрования используется ключ key типа ArrayBuffer. Длина ключа 128, 192 или 256 бит. Опции options — объект с полями:

  • iv — вектор инициализации типа Uint8Array и длинной 8 байт. Для его генерации рекомендуется использовать аппаратный генератор случайных чисел.
  • mode — режим шифрования, может иметь значения CBC, CFB, CTR, OFB или ECB.

Статья о векторе инициализации и режимах шифрования в википедии.