Mik*_*ike 10 encryption aes node.js node-crypto
我在使用Node的加密库时遇到了奇怪的问题.我写了这个简单的AES测试脚本:
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8')
var text = "123|123123123123123";
cipher.update(text,'utf8','hex')
var crypted = cipher.final('hex')
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8')
decipher.update(crypted,'hex','utf8')
var dec = decipher.final('utf8')
Run Code Online (Sandbox Code Playgroud)
当我执行console.log(dec)时,它为null.出于某种原因,如果我将测试设置为"123 | 123123",它可以工作.那么为什么"123 | 123123"工作但"123 | 123123123123123"不工作?
Ran*_*Etc 29
您需要存储来自cipher.update以及cipher.final的返回,以确保您拥有所有内容.
cipher.update"返回加密的内容,并且可以在流式传输时使用新数据多次调用":
http://nodejs.org/docs/v0.2.5/api.html#cipher-update-247
cipher.final"返回任何剩余的加密内容".
我想你只需在每次调用时追加结果:
var crypto = require('crypto');
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8');
var text = "123|123123123123123";
var crypted = cipher.update(text,'utf8','hex');
crypted += cipher.final('hex');
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8');
var dec = decipher.update(crypted,'hex','utf8');
dec += decipher.final('utf8');
Run Code Online (Sandbox Code Playgroud)
我得到'12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585'用于crypted和'123 | 123123123123123'用于dec以上节点v0.2.5
RandomEtc是正确的,但万一有人在这个问题上磕磕绊绊地使用'base64'
它们作为编码:不要.坚持'hex'
.至少从0.4.2开始,有一个错误可能导致'base64'
使用时数据损坏.请参阅:https://github.com/joyent/node/issues/738/
归档时间: |
|
查看次数: |
21717 次 |
最近记录: |