在 NodeJS 中重用加密模块创建的哈希对象是否安全?
Is it safe to reuse the hash object created by the crypto module in NodeJS?
要使用 nodejs 散列有效载荷,我可以使用加密模块并执行以下操作:
const crypto = require('crypto');
const payload = "abc123";
const hashObj = crypto.createHash('sha256');
const res = hashObj.update(payload).digest('hex');
现在假设我想散列第二个有效负载,我可以安全地重用我刚刚实例化的 hashObj
并使用新的有效负载对其调用 update
和 digest
吗?还是我必须为每个有效负载调用 createHash
?
编辑:澄清一下,重用是指将上面的代码扩展为以下代码:
const crypto = require('crypto');
const payload1 = "abc123";
const payload2 = "def456";
const hashObj = crypto.createHash('sha256');
const res1 = hashObj.update(payload1).digest('hex');
const res2 = hashObj.update(payload2).digest('hex');
哈希器不重置,向哈希器调用update()
only adds more data。所以这个:
const res1 = hashObj.update(payload1).digest('hex');
const res2 = hashObj.update(payload2).digest('hex');
会将 payload1
的散列分配给 res1
,将 payload1 + payload2
的摘要分配给 res2
,除了 calling .digest()
finalizes the hasher 的部分:
The Hash object can not be used again after hash.digest() method has been called. Multiple calls will cause an error to be thrown.
因此,对于任何离散的数据,您都需要一个单独的哈希器,对于任何数据流,您可以 update()
尽可能多地使用,然后在您拥有后调用 .digest()
一切都收拾好了。
要使用 nodejs 散列有效载荷,我可以使用加密模块并执行以下操作:
const crypto = require('crypto');
const payload = "abc123";
const hashObj = crypto.createHash('sha256');
const res = hashObj.update(payload).digest('hex');
现在假设我想散列第二个有效负载,我可以安全地重用我刚刚实例化的 hashObj
并使用新的有效负载对其调用 update
和 digest
吗?还是我必须为每个有效负载调用 createHash
?
编辑:澄清一下,重用是指将上面的代码扩展为以下代码:
const crypto = require('crypto');
const payload1 = "abc123";
const payload2 = "def456";
const hashObj = crypto.createHash('sha256');
const res1 = hashObj.update(payload1).digest('hex');
const res2 = hashObj.update(payload2).digest('hex');
哈希器不重置,向哈希器调用update()
only adds more data。所以这个:
const res1 = hashObj.update(payload1).digest('hex');
const res2 = hashObj.update(payload2).digest('hex');
会将 payload1
的散列分配给 res1
,将 payload1 + payload2
的摘要分配给 res2
,除了 calling .digest()
finalizes the hasher 的部分:
The Hash object can not be used again after hash.digest() method has been called. Multiple calls will cause an error to be thrown.
因此,对于任何离散的数据,您都需要一个单独的哈希器,对于任何数据流,您可以 update()
尽可能多地使用,然后在您拥有后调用 .digest()
一切都收拾好了。