加密和其他加密库的十六进制输出的差异?

时间:2016-06-24 09:09:06

标签: node.js encryption aes

我真的可以对此使用一些解释。我使用加密来加密十六进制的东西。十六进制输出与Ruby为同一算法(sha-256-ecb)提供的不同。

来自ruby的示例:\x15\x16\x02F\xD8\xFFwE\x91 (...)

节点示例:e67b2c88dd0cedeb29f2e02df98d48eb2f2e3470bf99b (...)

这些格式有什么不同?

1 个答案:

答案 0 :(得分:2)

Ruby的.digest方法返回以十六进制形式表示的二进制编码字符串。 如果您使用ruby中的.hexdigest方法来获取十六进制编码的字符串,那么您将得到与NodeJS中相同的结果:

红宝石:

require 'digest';
sha256 = Digest::SHA256.new
sha256.hexdigest 'message'
// "ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cea1afbf02b460c6d1d"

的NodeJS:

const crypto = require('crypto');

var hash = crypto.createHash('sha256');
hash.update('message');
hash.digest('hex');
// "ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cea1afbf02b460c6d1d"

NodeJS也能够编码为二进制文件:

const crypto = require('crypto');

var hash = crypto.createHash('sha256');
hash.update('message');
hash.digest('binary');
// Buffer returned

但我不知道将缓冲区转换为Ruby风格的\xXXXX十六进制表示的简单原生解决方案