【发布时间】:2019-08-05 17:23:04
【问题描述】:
我正在尝试将 Python 代码转换为 C++。
有没有办法将字符串转换为 UTF16LE 并使用 OpenSSL 中的 MD5?
我需要这个来对提供智能家居功能的路由器进行身份验证。
此代码适用于普通字符串 (UTF8) 很好,但我需要 UTF16LE,因为 UTF8 和 UTF16LE 相同字符串的结果不同:
string Crypto::getMD5(string stringToCrypt)
{
unsigned char digest[MD5_DIGEST_LENGTH];
char charArray[stringToCrypt.size()+1];
char mdString[33];
strcpy(charArray,stringToCrypt.c_str());
MD5((unsigned char*)&charArray, strlen(charArray), (unsigned char*)&digest);
for(int i = 0; i < 16; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
return mdString;
}
在 Python 中,我只是对字符串进行编码:
md5Hash = hashlib.md5()
md5Hash.update(input.encode('utf-16le'))
return md5Hash.hexdigest()
【问题讨论】:
-
因此,在 UTF8 和 UTF16 之间进行转换的过程是有据可查的。编写自己的代码可能需要一两个小时。
-
MD5 需要 (unsigned char*),在我将字符串转换为 u16string 后如何使用 char16_t 处理这个问题?
-
MD5 只需要一堆位来散列,因此您可以将 char16_t 数组(或指针)转换为无符号 char*。您可能还需要调整长度,即字符串长度 * sizeof(char16_t)
-
你让它工作了吗?
-
嘿,是的,抱歉有点晚了,但我在下面发布了我的解决方案。