mcrypt_encrypt CryptoJS 中的 CFB 模式函数
mcrypt_encrypt in CFB mode function in CryptoJS
我正在尝试将 php 中编写的 mcrypt_encrypt
函数转换为 node.js,我在 node.js 中使用 CryptoJS 并尝试了各种配置选项和我没有运气弄清楚这件事。
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
});
密码反馈 (CFB) 模式是一组具有分段大小参数的分组密码模式。 Mcrypt 仅支持 CFB8,而 CryptoJS 仅支持 CFB128。它们不兼容。
我已经实现了 CFBb in CryptoJS,它也支持 8 位段,但它只针对 CryptoJS 3.1.2 进行了测试,而不是通过 NPM 提供的 CryptoJS 2 版本。
在 PHP 中,当您将 mcrypt_module_open
与 Rijndael-128 一起使用时,您必须传递一个 32 字节密钥 和一个 16 byte 四.
因此对于 nodeJs,您可以使用 crypto 模块,例如:
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);
我正在尝试将 php 中编写的 mcrypt_encrypt
函数转换为 node.js,我在 node.js 中使用 CryptoJS 并尝试了各种配置选项和我没有运气弄清楚这件事。
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
});
密码反馈 (CFB) 模式是一组具有分段大小参数的分组密码模式。 Mcrypt 仅支持 CFB8,而 CryptoJS 仅支持 CFB128。它们不兼容。
我已经实现了 CFBb in CryptoJS,它也支持 8 位段,但它只针对 CryptoJS 3.1.2 进行了测试,而不是通过 NPM 提供的 CryptoJS 2 版本。
在 PHP 中,当您将 mcrypt_module_open
与 Rijndael-128 一起使用时,您必须传递一个 32 字节密钥 和一个 16 byte 四.
因此对于 nodeJs,您可以使用 crypto 模块,例如:
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);