4

SOAP Webサービスを認証しようとしていますが、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

デフォルトの文字セットとしてUTF-16リトルエンディアンを使用する可能性は低いため、これtoken.getBytes()はと同じエンコーディングを使用していないと思います。Encoding.Unicode.GetBytes(token)に変更するとどうなりtoken.getBytes(StandardCharsets.UTF_16LE)ますか?

于 2012-04-04T10:44:11.253 に答える