Содержание

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 передаётся объект со свойствами:

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 — объект с полями:

AES.decrypt(passphrase, key, options)

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

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