我真的可以对此使用一些解释。我使用加密来加密十六进制的东西。十六进制输出与Ruby为同一算法(sha-256-ecb)提供的不同。
来自ruby的示例:\x15\x16\x02F\xD8\xFFwE\x91 (...)
节点示例:e67b2c88dd0cedeb29f2e02df98d48eb2f2e3470bf99b (...)
这些格式有什么不同?
答案 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
十六进制表示的简单原生解决方案