是否有任何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);
,则可以避免所有这些转换和此函数。提前谢谢。
答案 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());
}