任何使用类字符串使用Md5的c ++库?

时间:2016-08-07 12:59:10

标签: c++ qt hash

是否有任何c ++标准库可以使用c ++ std::string代替signed\unsigned char*来处理Md5哈希(以及其他哈希)。我发现在openssl/md5.h中没有实现此功能,因为其功能MD5具有此标头:unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);

我问这个是因为我试图将QLabel lbResult的文本设置为字符串输入摘要的结果(来自QString& arg1)。

MD5((const unsigned char *) arg1.toStdString().c_str(),32,cryptResult);
ui->lbResult->setText(getStringFromUnsignedChar(cryptResult));

我必须构建这个getStringFromUnsignedChar,它会从结果中返回一个QString对象,但如果我有一些行string MD5(string s);,则可以避免所有这些转换和此函数。提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用QCryptographicHash。例如:

QByteArray hash = QCryptographicHash::hash(arg1.toUtf8(), QCryptographicHash::Md5);
ui->lbResult->setText(hash.toHex());

答案 1 :(得分:2)

你可以写一个包装器:

std::string md5(const std::string &str) {
    std::array<unsigned char, MD5_DIGEST_LENGTH> result;
    MD5(reinterpret_cast<const unsigned char*>(str.data()), str.size(), result.data());

    return std::string(reinterpret_cast<const char*>(result.data()), result.size());
}