mcrypt_encrypt в режиме CFB в CryptoJS

Я пытаюсь преобразовать mcrypt_encrypt функция написана на php для node.js, я использую CryptoJS в node.js и перепробовал всевозможные опции конфигурации, и мне не повезло с этим разобраться.

PHP-код:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,md5($secretKey),$ldapPwd,MCRYPT_MODE_CFB,$initialVector))

Код JavaScript, который я пробовал, не знает, что я делаю неправильно:

var encrypted = CryptoJS.AES.encrypt(password, keyBase64,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.NoPadding
});

0

Решение

Режим обратной связи шифра (CFB) — это семейство блочных режимов шифрования с параметром размера сегмента. Mcrypt поддерживает только CFB8, а CryptoJS поддерживает только CFB128. Они несовместимы.

Я реализовал CFBб в CryptoJS который также поддерживает 8-битные сегменты, но он протестирован только для CryptoJS 3.1.2, а не для версии CryptoJS 2, доступной через NPM.

1

Другие решения

В PHP, когда вы используете mcrypt_module_open с Rijndael-128, вы должны пройти 32-байтный ключ и 16 байт Внутривенно

Так что с nodeJs вы можете использовать крипто- модуль, например:

var crypto = require('crypto');

//Declare our secret key
var key = 'fcda0ssdegfffc9441581bdd86484513dd9cb1547df2jsd';

//Declare our alogrithm
var algorithm = 'AES-256-CFB';

//Generate IV to hex format, so 8 * 2 = 16 bytes
var iv = crypto.randomBytes(8).toString('hex');

//Declare our string to encrypt
var password = 'HELLO WORLD';


var handler = {};

handler.encrypt64 = function(algorithm, key, vector, password){

//create a cipher with an IV
var cipher = crypto.createCipheriv(algorithm, key.substr(0,32), iv);

//Encrypt our password from utf8 to hex
var encrypted = cipher.update(password, 'utf8', 'base64');

//Return any remaining enciphered data to hex format
encrypted += cipher.final('base64');

//Return a base64 String
return encrypted;
};

handler.decrypt64 = function(algorithm, key, vector, password){

//create a decipher with an IV
var decipher = crypto.createDecipheriv(algorithm, key.substr(0, 32), iv);

//Decrypt our encode data from base64 to utf8
var decrypted = decipher.update(encode, 'base64', 'utf8');

decrypted += decipher.final('utf8');


//Return a utf8 string
return decrypted;
};

var encode = handler.encrypt64(algorithm, key, iv, password);

var decode = handler.decrypt64(algorithm, key, iv, encode);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector