c++ - 如何使用 openssl 1.1.1a 生成 SHA3
问题描述
编辑:我从这个问题中提取了 SHA3 代码(使用 OpenSSL 库在 C++ 中生成 SHA-3 哈希)并且 SHA3 在 openssl 1.0.2q(但不是 1.0.2r)版本中。
我正在尝试使用 openssl 库生成 SHA3。
#include <stdio.h>
#include <openssl/evp.h>
unsigned int SHALEN=32;
void sha3(unsigned char *digest, const unsigned char *message, size_t message_len)
{
EVP_MD_CTX *mdctx;
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, EVP_sha3_256(), NULL);
EVP_DigestUpdate(mdctx, message, message_len);
EVP_DigestFinal_ex(mdctx, digest, &SHALEN);
EVP_MD_CTX_destroy(mdctx);
}
int main()
{
unsigned char digest[32];
unsigned char message[32];
for(int i=0;i<32;i++)
message[i]=0;
sha3(digest,message,32);
}
上面的代码适用于我的个人 Mac(使用 openssl 1.0.2q 2018Nov),但不适用于服务器(Ubuntu 16.04,openssl version=1.1.1a)。编译时使用
g++ test.cpp -lcrypto
它给
/tmp/ccXTFrzC.o: In function `sha3(unsigned char*, unsigned char const*, unsigned long)':
test.cpp:(.text+0x1e): undefined reference to `EVP_sha3_256'
collect2: error: ld returned 1 exit status
我查阅了 openssl 手册,但它不是很有帮助。我在这里错过了什么吗?提前致谢。
顺便说一句,建议我不要降级 openssl 来解决问题。
解决方案
推荐阅读
- docker - 纱线安装错误“ENOENT:没有这样的文件或目录
- slack-api - Slack API - 为某些帖子生成:invalid_arg_name
- r - 上传 2 个文件时的条件面板
- flutter - 在 Flutter Grid 视图中制作 Sticky 左侧标题视图
- c++ - 为什么我的 out_of_range 异常没有被捕获
- rest - 当payload中的标识符不存在时,应该返回哪个http状态码?
- postgresql - 如何使用从 Visual Studio 生成的 Script-Migration 文件在 Ubuntu PostgreSQL 数据库上进行生产?
- c# - 从 2 个基类继承一个类,一个是我的类,另一个是 AspNet IdentityUser
- postgresql - Docker 文件 postgres 初始模式未执行
- python - 是否有使用 sphinx.ext.napoleon 在 Sphinx 中记录函数类型参数的标准格式?