同一字符串的SHA-1不同于Java和C ++
要哈希的字符串-38902566
Java中的SHA-1-6ffc3d4038943971cd91db0cf0f3de8ecf1b2853(已确认在线sha1工具会产生相同结果)
C ++中的SHA-1-093288D2933CE7D55295450EBFE711F3E1AE3BF2
Java实现:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] messageDigest = md.digest(customerId.getBytes());
BigInteger no = new BigInteger(1, messageDigest);
String hashtext = no.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
C ++实现
int hash_SHA1(const char* cid, int len, char* digest)
{
/* Creating Id Digest. */
int rc = 0, i;
unsigned char idDgst[21] = { '\0' };
char buffer[3] = { '\0' };
rc = SHA1(cid, len, idDgst) == NULL ? -1 : 0;
for(i = 0; !rc && (i < sizeof(idDgst)-1); i++)
{
sprintf(buffer, "%02X", idDgst[i]);
strncat(digest, buffer, 3);
}
return rc == 0;
}
C ++代码与我共享,可以用Java实现。我在这里错了吗?
在C代码中调用该函数的位置,在输入字符串后附加了多余的字符。提供正确的输入将得到完全相同的结果。感谢@Topaco验证代码。
Java可以为String中的每个字符使用16位。 C ++-不。