我正在用C ++编写代码,我希望获得某个字符串的md5校验和。
我知道我可以运行system("echo "myStirng" | md5sum > some_file.txt")
然后阅读该文件。
我正在为嵌入式系统编写代码,由于性能问题,我不想使用文件操作。另外,我不能在我的代码中使用任何openSSL函数。
我做了我的搜索,我遇到的所有答案都包括一些文件操作或使用openSSL函数。
有没有办法在不使用文件操作和不使用openSSL的情况下获取md5校验和?也许运行linux命令md5sum作为与C函数system
之类的代码不同的进程,但是返回校验和十六进制字符串而不是返回代码。
谢谢你。
答案 0 :(得分:0)
这是我前段时间写的概念证明。非常类似于@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;
}
答案 1 :(得分:0)
使用http://hashlib2plus.sourceforge.net/然后运行类似:
#include <hashlibpp.h>
#include <string>
int main() {
hashwrapper *rap = new md5wrapper();
std::string hash = rap->getHashFromFile("README.TXT");
}