-4

相同字符串的 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 中实现。我在这里做错了什么?

4

2 回答 2

0

在 C 代码中调用函数的输入字符串中附加了额外的字符。给出正确的输入给出了完全相同的结果。感谢@Topaco,用于验证代码。

于 2019-11-21T10:34:57.473 回答
-1

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

于 2019-11-21T07:48:14.760 回答