2012-04-04 4 views
4

私はsoap webserviceを認証しようとしていますが、私がjavaで生成するSHA1ハッシュは動作していませんが、.Netで生成されたハッシュは動作します。.Netで生成されるSHA1ハッシュのJava同等のものは何ですか?

このJavaコードと同等の.NETコードは何ですか?

//.Net

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

生成されたハッシュ:a508a29efeea2821e519fcbf64f164dd5d672233

// Javaの - これは私が生成されたハッシュ

String token = "H?OIgSJ35~LKJ:9~~7&sUtHDeKAv*[email protected]?cEwV[}[email protected]%}"; 
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); 

コモンズ・コーデック-1.4.jarを使用してみましたものです: 88e7c8fc13ac75e8efc8d0c00182caa6dc087093

+0

それぞれのブロックはどのような文字列を生成しますか? – alberge

+0

'Encoding.Unicode.GetBytes'は' String.getBytes'とは異なるエンコーディングをしているようです。これら2つの出力を比較しようとしましたか? 'token.getBytes(" UTF-16LE ")'を試してください。 –

+0

@albergeは、私の編集で追加しました – Ram

答えて

4

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

+0

StandardCharsets.UTF_16LEはどこにありますか? rt.jarで見つけられますが、sun.nio.cs.StandardCharsetsですが、UTF_16LEはありません – Ram

+1

@Mohan [java.nio.charset.StandardCharsets](http://docs.oracle.com/javase/7 /docs/api/java/nio/charset/StandardCharsets.html) –

+0

@Bantharは返信してくれてありがとうございましたが、rt.jarでそれを見つけることができませんでした。それを含む瓶は何ですか? – Ram

関連する問題