如果我放弃哈希计算,我必须调用 SHA1_Final() 吗?



它是关于所有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_*方法,即通过预处理器"配置"为SHA1,SHA256的方法的文件...

HASH_FINAL方法是SHA1_Final(和SHA256_Final(。在这里,唯一"闻到"清洁气味的操作是

OPENSSL_cleanse(p, HASH_CBLOCK);

OPENSSL_cleanse在哪里

OPENSSL_cleanse(( 用一串 0 填充大小 len 的 ptr

(取自此处(。

但是OPENSSL_cleanse的大小是HASH_CBLOCK,所以我会说它正在清理用于保存必须散列的部分源数据的内部缓冲区。说明:SHA1 一次处理 512 位(64 字节(的数据。如果您尝试使用SHA1_Update对 70 字节的数据进行哈希处理,则 64 字节被哈希处理,6 个字节保存在某个地方以供下SHA1_Update使用。SHA1_Final完成使用这些字节,然后清除它们。

最新更新