Generate a consistent sha256 hash from an object in Node
我有一个对象,想在Node中用sha256进行哈希处理。对象的内容是简单的Javascript类型。例如,假设:
1 2 3 4 5 | var payload = { "id":"3bab3f00-7d55-11e7-9b0a-4c32759242a5", "foo":"a message", "version": 7, }; |
我创建像这样的哈希:
1 2 3 | const crypto = require('crypto'); var hash = crypto.createHash('sha256'); hash.update( ... ).digest('hex'); |
问题是,通过什么更新? crypto的文档说您可以传递
我不能使用
还有其他选择吗?我不想从NPM下载软件包。
正确的术语是"规范的",动作称为"规范化"(我在这里假设为EN-US),您可以在此处找到产生规范输出的字符串。
请注意,您必须确保输出还具有正确的字符集(应首选UTF-8)和行尾。不应存在??虚假数据,例如字节顺序标记或NUL终止字符串足以使哈希值无效。
之后,您可以将其作为
您当然可以使用任何规范编码。请注意,XML定义了XML-digsig,其中包含在签名生成和签名过程中的规范化,这意味着如果XML代码被更改(即使不更改结构或内容,当然,空格/缩进也不重要),验证甚至会成功。 。
我仍然建议在实现之间甚至库的版本更新之间进行回归测试。