SHA-1对于C ++和JAVA中发现的相同字符串

问题描述 投票:-3回答:2

同一字符串的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实现。我在这里错了吗?

java encryption hash sha1 javax.crypto
2个回答
0
投票

在C代码中调用该函数的位置,在输入字符串后附加了多余的字符。提供正确的输入将得到完全相同的结果。感谢@Topaco验证代码。


-1
投票

Java可以为String中的每个字符使用16位。 C ++-不。

© www.soinside.com 2019 - 2024. All rights reserved.