nodejs密码ubuntu没有按预期工作

时间:2013-03-12 13:25:48

标签: macos node.js ubuntu cryptography encryption

我写了一个数据加密工具,它适用于mac os,但不适用于ubuntu。 以下代码显示了差异。

var crypto = require('crypto');

var k = '1234567890123456';
var v = '1234567890123456';
var alg = 'AES-128-CBC';


var buf = new Buffer('Hello world!');
console.log(buf);

var cipher = crypto.createCipheriv(alg, k, v);
var result = cipher.update(buf);
result += cipher.final();
buf = new Buffer(result, 'binary');
console.log(buf);

var decipher = crypto.createDecipheriv(alg, k, v);
decipher.setAutoPadding(auto_padding=false);
result = decipher.update(buf);
result += decipher.final();
buf = new Buffer(result, 'binary');

console.log(buf);
console.log(buf.toString());

输出,在mac:

<Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64 21>
<Buffer 17 0e 2d 73 94 bf d4 24 95 b3 a7 49 73 58 5e 3f>
<Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 04 04 04 04>
Hello world!

ubuntu的:

<Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64 21>
<Buffer 17 0e 2d 73 fd fd fd 24 fd fd fd 49 73 58 5e 3f>
<Buffer 05 6d 69 fd fd 1b 49 62 60 39 fd 68 fd fd fd>
mi��Ib`9�h���

任何想法? thx

1 个答案:

答案 0 :(得分:3)

节点0.10.0引入了对加密模块的一些内部更改,这可能会破坏现有代码。

通过以下修复(由http://nodejs.org/api/crypto.html#crypto_recent_api_changes建议),它可以在我的Debian机器上运行:

var crypto = require('crypto');
crypto.DEFAULT_ENCODING = 'binary';
...

(感谢@ user568109让我阅读页面!)

上述页面还提供了永久修复代码的建议,因为设置crypto.DEFAULT_ENCODING被视为临时措施。