我可以使用以下代码通过NodeJS成功创建Hmac:
(来自https://nodejs.org/api/crypto.html#cryptocreatehmacalgorithm-key-options的略微修改的示例)Crypto.createHmac('sha256', Crypto.randomBytes(16))
.update('I love cupcakes')
.digest('hex');
这将导致生成以下值(基于十六进制的字符串Hmac签名):
fb2937ca821264812d511d68ae06a643915931375633173ba64af9425f2ffd53
我如何使用该签名验证数据未被篡改?(当然使用NodeJS)我的假设是,您可以调用一种方法,向其提供数据和签名,然后获取一个布尔值,告诉您数据是否被篡改或类似的东西。
哦,等等,当我写这个问题时,我开始思考...
我需要存储我生成的原始随机字节(Crypto.randomBytes(16)),并将它们传递给接收者,以便他们只需再次生成HMac并验证结果是否相同(
fb2937ca821264812d511d68ae06a643915931375633173ba64af9425f2ffd53
)吗?如果是这样的话,那很奇怪,因为Crypto.randomBytes(16)的参数被命名为secret(在官方示例中)。看起来像是需要保密??
请告诉我是否有一种方法在接收端验证签名以及如何执行该操作。
官方文档:有点令人困惑
下面是官方文档中定义的函数:
crypto.createHmac(algorithm, key[, options])
在函数定义中,可以看到第二个参数被命名为key。但是,在示例中,他们将其称为secret。
const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
.update('I love cupcakes')
.digest('hex');
console.log(hash);