我使用init-update-final机制计算哈希,即初始化哈希上下文,然后使用各种大小的输入数据进行哈希更新,最后进行摘要计算。这可以使用OpenSSL 的 EVP_DigestInit、EVP_DigestUpdate 和 EVP_DigestFinal_Ex 函数或Crypto++ 的 Update 和 Final 方法来完成。
从我可以从OpenSSL和Crypto++的源代码中挖掘出来的内容,似乎输入数据实际上被复制和存储了。谁能证实这一点?这是散列过程的限制还是标准程序?这会随着使用的摘要算法而变化吗?
我的印象是散列算法会根据输入数据块计算一些内部状态,最终摘要将根据在所有各种更新调用中收集的内部状态来计算。情况似乎并非如此。显然,我对散列算法的机制还不够了解。