我正在用 C++ 编写代码,我希望获得某个字符串的 md5 校验和。
我知道我可以运行 system("echo "myStirng"| md5sum > some_file.txt")
然后读取该文件。
我正在为嵌入式系统编写代码,由于性能问题,我不想使用文件操作。另外,我无法在代码中使用任何 openSSL 函数。
我进行了搜索,找到的所有答案要么包含一些文件操作,要么使用了 openSSL 函数。
有没有一种方法可以在不使用文件操作且不使用openSSL的情况下获取md5校验和?也许将 linux 命令 md5sum 作为与 C 函数 system
一样的代码不同的进程运行,但返回校验和十六进制字符串而不是返回代码。
谢谢你。
最佳答案
这是我不久前写的概念证明。与 @slugonmission 评论中的链接中的第二个答案非常相似,但我认为更好一点(使用 fread
)。实际上最后我更喜欢使用库的方法,因为速度更快一点。因此,我建议您是否可以接受对 openssl 的依赖,并且性能对于选择该库很重要。
FILE* pipe = popen("md5sum /home/bla.txt", "r");
if (pipe != NULL)
{
static const unsigned md5size = 32;
unsigned char md5res[md5size + 1];
int readSize = fread((void*) md5res, sizeof(char), md5size, pipe);
if (readSize != md5size)
{
std::cout << "Error reading md5" << std::endl;
return 1;
}
pclose(pipe);
md5res[md5size] = 0;
}
关于c++ - 如何获取md5sum命令并获取代码中的字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398851/