У меня есть текст, закодированный с помощью Blowfish Mcrypt РНР:Дешифровка Mcrypt закодированный текст с node.js
$td = mcrypt_module_open ('blowfish', '', 'cfb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
mcrypt_generic_init ($td, "somekey", $iv);
$crypttext = mcrypt_generic ($td, "sometext");
mcrypt_generic_deinit ($td);
$res = base64_encode($iv.$crypttext);
При попытке расшифровать данные с криптографической библиотекой узла я получаю кучу мусора.
var crypto = require("crypto"),
ivAndCiphertext = "base64-encoded-ciphertext",
iv, cipherText, ivSize = 8, res= "";
ivAndCiphertext = new Buffer(ivAndCiphertext, 'base64');
iv = new Buffer(ivSize);
cipherText = new Buffer(ivAndCiphertext.length - ivSize);
ivAndCiphertext.copy(iv, 0, 0, ivSize);
ivAndCiphertext.copy(cipherText, 0, ivSize);
c = crypto.createDecipheriv('bf-cfb', "somekey", iv.toString("binary"));
res = c.update(cipherText, "binary", 'utf8');
res += c.final('utf8');
Любая идея относительно того, что я делаю неправильно?
EDIT
Использование OpenSSL (который крипто библиотека является оболочкой для) непосредственно дает тот же искаженный результат:
openssl enc -K the_key_in_hex bf-cfb -d -p -iv the_iv_in_hex -nosalt -nopad -a
Так это не выглядит как проблема с Код Javascript.
Вы правы, это была ошибка при копировании кода. Исправлен вопрос. – aviaron
Поскольку зашифрованный текст имеет кодировку base64, я думаю, что вы должны сделать: 'res = c.update (cipherText," base64 ", 'utf8');' –
'cipherText' является' Буфером' и интерпретируется как бинарная закодированная строка при передаче в 'update'. – aviaron