Ada*_*M-W 5 encryption blowfish mcrypt ecb node.js
我正在尝试使用内置的加密库解码Node.js中的以下base64编码的密文
2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==
Run Code Online (Sandbox Code Playgroud)
它似乎与PHP的mcrypt函数一起使用字符串typeconfig.sys^_-作为键,如将值输入到http://www.tools4noobs.com/online_tools/decrypt/并选择Blowfish,ECB,Base64 decode所示.
但是,当我在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);
Run Code Online (Sandbox Code Playgroud)
我得到垃圾输出:
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?
Run Code Online (Sandbox Code Playgroud)
我也尝试过对库本身的测试,因为它似乎能够处理它自己编码的东西:
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);
Run Code Online (Sandbox Code Playgroud)
生产:
y0rq5pYkiU0=
foobar
Run Code Online (Sandbox Code Playgroud)
但复制并粘贴base64字符串并将其输入http://www.tools4noobs.com/online_tools/decrypt/以及键"key"也会产生垃圾输出.
这两个库不应该产生相同的输出,或者我做错了什么?
Node.js在将密码用作密钥之前计算密码的MD5哈希值.据我所知,mcrypt按原样使用密钥.
计算密码的MD5哈希值,并将其用作mcrypt密钥.