【发布时间】:2018-05-30 14:11:18
【问题描述】:
它是关于所有 SHA 家族的。
我查看了https://www.openssl.org/docs/man1.1.0/crypto/SHA1.html 页面,没有看到任何会阻止我在我想放弃哈希计算时不调用SHA1_Final() 的内容。
也就是说,如果我这样做可以吗:
try {
SHA1_Init(&ctx);
while (!finish) {
const Data& data = getData();
SHA1_Update(&ctx, data.data(), data.len());
}
SHA1_Final(&md, &ctx);
}
catch(const std::exception& e) {
std::cerr << "Ooops, exception while reading data. " << e.what() << std::endl;
std::cerr << "Not calling SHA1_Final!" << std::endl;
throw;
}
我的直觉告诉我,不打电话给SHA1_Final() 应该没问题,如果需要“清理”ctx,应该有SHA1_Destroy(),当然没有...
【问题讨论】:
-
我的直觉也是这么说的。有一个
SHA_CTX上下文。如果在方法结束时将其丢弃,则没有问题。如果不使用SHA1_Final,不确定是否可以重复使用SHA1_CTX。 -
我找不到
SHA1_Final...Still the code forSHA512_Final的代码,应该足够相似,没有清理/释放任何东西。 -
@xanatos - 我只担心这会进行逆向工程,并且取决于实现,这在未来可能会改变。
SHA1_CTX可以在调用SHA1_Init()时重复使用。感谢您的努力! -
@gregorz 文档中没有提到使用
_Final的必要性,类似的实现不需要它,这将违反上下文作为临时容器的逻辑数据来做...