如何获取md5sum命令并在代码中获取字符串输出

时间:2013-12-05 11:31:28

标签: c++ linux unix

我正在用C ++编写代码,我希望获得某个字符串的md5校验和。 我知道我可以运行system("echo "myStirng" | md5sum > some_file.txt")然后阅读该文件。 我正在为嵌入式系统编写代码,由于性能问题,我不想使用文件操作。另外,我不能在我的代码中使用任何openSSL函数。 我做了我的搜索,我遇到的所有答案都包括一些文件操作或使用openSSL函数。 有没有办法在不使用文件操作和不使用openSSL的情况下获取md5校验和?也许运行linux命令md5sum作为与C函数system之类的代码不同的进程,但是返回校验和十六进制字符串而不是返回代码。

谢谢你。

2 个答案:

答案 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");
}