如何在Linux上用C++计算SHA-512哈希?

14

在Linux上,是否有用于计算SHA-512哈希值的标准库或常用库?

我正在寻找一个C或C ++库。

4个回答

12

你检查过 OpenSSL 吗?文档显示它支持此功能。

这里是几个其他实现的列表

示例代码

 md = EVP_get_digestbyname("sha512");
 EVP_MD_CTX_init(&mdctx);
 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_cleanup(&mdctx);

4
哈哈,你比我快,因为“OpenSSL支持SHA512”只有24个字符,而答案必须至少30个字符。 - Cameron Skinner
你能否提供一个链接,指向可以用于计算哈希的函数的文档? - Nathan Osman
要在Linux上查找手册页中的代码示例,请执行:man EVP_MD_CTX_init - Alexis Wilke
维基百科列出实现的最后一个版本是2014年3月1日的修订版。我已经更新了上面的链接以指向那里。整个部分在当天晚些时候被删除:“这个列表远远不完整,已经过长而且没有用,违反 WP:NOT。” NIST 维护着已验证实现的列表;在此写作时,有3,761个条目。 - Tom Zych

10

检查这段代码。它是完全可移植的,不需要任何额外的配置。只需使用STL即可。你只需要声明。

#include "sha512.hh"

然后使用这些函数

sw::sha512::calculate("SHA512 of std::string") // hash of a string, or
sw::sha512::file(path) // hash of a file specified by its path, or
sw::sha512::calculate(&data, sizeof(data)) // hash of any block of data

每当你需要它们时,它们会返回std::string类型的值。


你提供的软件在只有一个.update()调用的情况下可以创建准确的哈希值,但是在存在多个.update()调用时会失败。只是提供信息。 - user8819

6
我正在使用Botan进行各种加密操作。它有许多种SHA(-512)算法。
当我查看C++加密库时,我也发现了Crypto++。Botan API的风格对我来说更为直接,但这两个库都是稳定和成熟的。

@Gracchus 在许多情况下,某些算法没有具体的文档。原因是每个算法都被实现为一个过滤器,您可以使用类似于其他过滤器的方式使用它们。如果您对特定参数感兴趣,请在维基百科上查找算法本身,因为实现应该是规范的。头文件中的注释也可能有所帮助。手册提供有关使用过滤器的信息。 - Tamás Szelei

0
我在编程中使用这个方法非常成功: 安全哈希算法(SHA) 采用BSD许可证,包括SHA-1,SHA-224,SHA-256,SHA-384和SHA-512。它还具有一些实用的辅助函数,可简化一些简单情况下的步骤:
SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH])

它还有许多性能调优选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接