4

我正在尝试验证肥皂网络服务,但我在 java 中生成的 SHA1 哈希不起作用,但使用 .Net 生成的哈希有效。

这个 .Net 代码的 java 等价物是什么?

//。网

var token = "H?OIgSJ35~LKJ:9~~7&sUtHDeKAv*O@is?cEwV[}!i@u%}";
var shaProvider = new SHA1Managed();
var rawKey = Encoding.Unicode.GetBytes(token);
var rawHash = shaProvider.ComputeHash(rawKey);
var signature = BitConverter.ToString(rawHash).Replace("-", "").ToLower();

产生的哈希:a508a29efeea2821e519fcbf64f164dd5d672233

//Java - 这是我尝试使用 commons-codec-1.4.jar

String token = "H?OIgSJ35~LKJ:9~~7&sUtHDeKAv*O@is?cEwV[}!i@u%}";
MessageDigest cript = null;
try {
    cript = MessageDigest.getInstance("SHA1");
} catch (NoSuchAlgorithmException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
cript.reset();
cript.update(token.getBytes());
String password = new String(Hex.encodeHex(cript.digest()));
System.out.println(password);

产生的哈希值:88e7c8fc13ac75e8efc8d0c00182caa6dc087093

4

1 回答 1

4

我的猜测是它token.getBytes()不使用与 相同的编码Encoding.Unicode.GetBytes(token),因为您不太可能将 UTF-16 Little Endian 作为您的默认字符集。如果将其更改为 会发生什么token.getBytes(StandardCharsets.UTF_16LE)

于 2012-04-04T10:44:11.253 回答