【发布时间】:2019-05-04 17:17:11
【问题描述】:
下面的代码是使用 OpenSSL 计算 SHA152 哈希的方法,但是根据更新日志,OpenSSL 已经支持 SHA512/256 有一段时间了 - 问题是我找不到有关如何使用它的信息?!如果有人知道怎么做,如果您能告诉我怎么做,我将不胜感激。
SHA512_Init (&mdContext);
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
SHA512_Update (&mdContext, data, bytes);
SHA512_Final (c,&mdContext);
for(i = 0; i < SHA512_DIGEST_LENGTH; i++) printf("%02x", c[i]);
printf (" %s\n", filename);
return 0;
(这段代码只是一个例子,我知道它不会像那样运行)
编辑:
我刚刚将SHA512_DIGEST_LENGTH 更改为SHA256_DIGEST_LENGTH,这是正确的方法吗?我担心这仍然会计算整个 SHA512 哈希(我想看看是否有性能提升)不完全确定它是如何工作的,所以提前道歉!)
【问题讨论】:
-
SHA512/256 是“用不同的内部 IV 计算 SHA512,然后取输出的最左边 256 位”,所以方法是不是 只需更改您打印的
SHA512_Final输出的位数。我不知道实际上是什么方法。不管它实际上是什么,它将涉及计算整个 512 位哈希,然后丢弃其中的一半;奇怪的是,在某些 CPU 上,这仍然比计算 SHA256 更快。 -
如果您使用的是 OpenSSL 1.1.1,我相信执行此操作的正确方法是通过 EVP 系列(坦率地说,无论如何您都应该使用它),特别是使用
EVP_sha512_256摘要方法。如果你不使用 OpenSSL 1.1.1,我认为你根本做不到。