node.js - 使用 nodejs crypto 与 php 的 mcrypt 解密 blowfish-ecb

标签 node.js encryption mcrypt blowfish ecb

我正在尝试使用内置的加密库在 Node.js 中解码以下 base64 编码的密文

2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==

它似乎与 PHP 的 mcrypt 函数一起使用字符串 typeconfig.sys^_- 作为键,如将值输入 http://www.tools4noobs.com/online_tools/decrypt/ 所示。并选择 Blowfish、ECB、Base64 解码。

但是,当我在 Node.js 中运行以下代码时:

var crypto = require('crypto');
var data = "2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==";
var decipher = crypto.createDecipher('bf-ecb', 'typeconfig.sys^_-');
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);

我得到垃圾输出:

y
�:����d�(����Q�i��z1��4�� �k�(� ��a5����u��73c/��(ֻ��)��������fȠ���
                                                              �ec�-<z�8����(�-L���ԛ�I��1L*��u�4�j-�Чh쭊@\P)?޼�.�^���q㊬�U���W&�x��85�T-ג9,dE<g}�`*�
��|@����k"�!�D'u���,x��7����
                 ��9q=q�q��ա>�w�T����H3͜�i)R��zy��C��
                                                    ��o�

我还尝试了对库本身的测试,因为它似乎能够很好地处理自己编码的内容:

var crypto = require('crypto')
var cipher = crypto.createCipher("bf-ecb", "key");
var data = cipher.update("foobar", "utf8", "base64");
data += cipher.final("base64");
console.log(data);
var decipher = crypto.createDecipher("bf-ecb", "key");
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);

产生:

y0rq5pYkiU0=
foobar

但复制并粘贴该 base64 字符串并将其输入到 http://www.tools4noobs.com/online_tools/decrypt/ 中键“key”旁边也会产生垃圾输出。

这两个库不应该产生相同的输出,还是我做错了什么?

最佳答案

Node.js 在将密码用作 key 之前计算密码的 MD5 哈希值。据我所知,mcrypt 按原样使用 key 。

计算密码的 MD5 哈希,并将其用作 mcrypt key 。

关于node.js - 使用 nodejs crypto 与 php 的 mcrypt 解密 blowfish-ecb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647737/

相关文章:

java - 将字符串压缩到文本文件(AES)后解密失败

php - 如何使用 OpenSSL 解密之前使用 mcrypt 加密的字符串?

javascript - NodeJS ES6 模块和 "default"导出/导入

node.js - Heroku 命令错误 - Mac OS X Sierra

javascript - 基于流程的编程 js html ui

OSX 中的 python 地穴

c - 二进制添加大型字符数组?

php - 如何在 PHP 中进行 AES256 解密?

php - 两个不相等的相等字符串

javascript - Joi 数组 基于根键值的对象验证