我需要为不断增长的数据集计算哈希码,如果可能的话,它需要加密安全。例如散列自然数系列,首先是 1,然后是 12,然后是 123。
如果加密安全散列总是需要从一开始就为每个添加的数字做所有事情,那么我需要一些其他的散列。最安全的加密方式,或者需要尽可能长时间才能找到提供相同哈希码的其他数据的方式。
RAM 使用量可能很大。
我需要为不断增长的数据集计算哈希码,如果可能的话,它需要加密安全。例如散列自然数系列,首先是 1,然后是 12,然后是 123。
如果加密安全散列总是需要从一开始就为每个添加的数字做所有事情,那么我需要一些其他的散列。最安全的加密方式,或者需要尽可能长时间才能找到提供相同哈希码的其他数据的方式。
RAM 使用量可能很大。
您正在寻找的是树哈希,它是 Merkle 树的一种形式。本质上,每个数据块都被散列,并且在每个数据块散列的散列上计算散列,依此类推,直到到达根。通常,有专门的设计可以防止直接和幼稚的方法出现安全问题。
如果您想以增量方式追加更多数据,那么您显然需要存储数据块的哈希值或至少一些中间值,以便您可以有效地重新计算根哈希值。BLAKE2 有一个可以使用的特殊树模式,虽然我不确定是否有任何标准库支持它,所以您可能需要获取参考代码并相应地配置它。BLAKE2 在密码学上是安全的,而且速度极快,即使在纯 C 语言中也是如此。
还有更新的 BLAKE3,它应该是加密安全的,而且速度更快。它始终以树哈希模式运行。但是,它的密码分析比 BLAKE2 少,因此我建议几乎所有应用程序都使用 BLAKE2。
其他哈希函数也有类似的方法,但这些是最快的密码安全选项。