用nodejs crypto与php的mcrypt解密blowfish-ecb
我试图在Node.js中使用内置的encryption库来解码以下base64编码的密文
2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==
它似乎与PHP的mcrypt函数使用stringtypeconfig.sys^_-
作为关键,如通过input值http://www.tools4noobs.com/online_tools/decrypt/和selectBlowfish,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
我也试过了库本身的testing,因为它似乎能够处理它自己编码的东西:
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
但是复制并粘贴该base64string并将其input到http://www.tools4noobs.com/online_tools/decrypt/中,同时还会生成垃圾输出。
这两个库不应该产生相同的输出,还是有什么我做错了?
Node.js在将密钥用作密钥之前计算密码的MD5哈希值。 据我所知,mcrypt按原样使用密钥。
计算密码的MD5散列,并将其用作mcrypt密钥。
https://github.com/tugrul/node-mcrypt
var mcrypt = require('mcrypt'); var bfEcb = new mcrypt.MCrypt('blowfish', 'ecb'); bfEcb.open('typeconfig.sys^_-'); var cipherText = new Buffer('2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==', 'base64'); console.log(bfEcb.decrypt(cipherText).toString()); bfEcb.close();