下面的代码是使用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哈希值(我想看看性能是否有所提高)尚不完全确定它是如何工作的,因此请您提前道歉!)
答案 0 :(得分:2)
假设您使用的是Linux环境,则可以参考以下sha512-256示例(evptest.c):
#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>
#define DIGEST_NAME "sha512-256"
int main(int argc, char *argv[]) {
EVP_MD_CTX *mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;
OpenSSL_add_all_digests();
md = EVP_get_digestbyname(DIGEST_NAME);
if(!md) {
printf("Unknown message digest %s\n", DIGEST_NAME);
exit(1);
}
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_destroy(mdctx);
printf("Digest %s is: ", DIGEST_NAME);
for(i = 0; i < md_len; i++)
printf("%02x", md_value[i]);
printf("\n");
/* Call this once before exit. */
EVP_cleanup();
exit(0);
}
在具有最新OpenSSL和基本构建功能的Linux中,您可以对其进行编译:
gcc evptest.c -l crypto -o evptest
然后执行evptest二进制文件,您将看到sha512-256结果
./evptest
Digest sha512-256 is: dd889041ed0cf4ff7a1cf77dd384444b2de9347b032b95e64fc1955d889da8fd