md5 inC++ 与 UTF16LE
md5 inC++ with UTF16LE
我正在尝试将 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()
有点晚了,但这对我有用:
string Crypto::getMd5HashAsUtf16(string stringToHash)
{
//convert input string(utf8) to utf16
wstring_convert<codecvt_utf8_utf16<char16_t>,char16_t> wstringConverter;
u16string stringToCrypt16 = wstringConverter.from_bytes(stringToHash);
//create a char array
char16_t bufferCharArr16[stringToCrypt16.size()+1];
//fill char array from input string
for(int i=0; i < stringToCrypt16.size(); i++)
{
bufferCharArr16[i] = stringToCrypt16.at(i);
}
//calc hash
unsigned char digest[MD5_DIGEST_LENGTH];
char mdString[33];
MD5((unsigned char*)bufferCharArr16, stringToCrypt16.size()*sizeof(char16_t), (unsigned char*)&digest);
for(int i = 0; i < 16; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
return mdString;
}
我正在尝试将 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()
有点晚了,但这对我有用:
string Crypto::getMd5HashAsUtf16(string stringToHash)
{
//convert input string(utf8) to utf16
wstring_convert<codecvt_utf8_utf16<char16_t>,char16_t> wstringConverter;
u16string stringToCrypt16 = wstringConverter.from_bytes(stringToHash);
//create a char array
char16_t bufferCharArr16[stringToCrypt16.size()+1];
//fill char array from input string
for(int i=0; i < stringToCrypt16.size(); i++)
{
bufferCharArr16[i] = stringToCrypt16.at(i);
}
//calc hash
unsigned char digest[MD5_DIGEST_LENGTH];
char mdString[33];
MD5((unsigned char*)bufferCharArr16, stringToCrypt16.size()*sizeof(char16_t), (unsigned char*)&digest);
for(int i = 0; i < 16; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
return mdString;
}