0

私は.netとJavaアプリケーションでハッシュを計算しています.しかし、両方が異なる結果を出しているため、結果が得られたときに問題が発生しました.この問題について検索しているときに、これらの質問の
質問1質問2が見つかりました答えはありますが、残念ながら成功しませんでした。私も試しましたが、結果は同じではありませんでした UTF-8。今、私は立ち往生していて、なぜそれが起こっているのかを知りたいのですが、どうすればこれを解決できますか私のコードスニペットは以下の.NetにありますUTF-16LE



byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes);


ジャワ

MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] buffer2 = sha1.digest(bytes);

どんな助けでも大歓迎です。

4

2 に答える 2

3

I think problem is that in C# byte is unsigned type, and in java it not.

This 2 codes works equally:

    public static void main(String[] args) throws NoSuchAlgorithmException {
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] bytes = new byte[] { 1, 2, 10 };
        byte[] buffer2 = sha1.digest(bytes);
        for(byte b : buffer2){
            System.out.println(b);
        }
    }

    static void Main(string[] args)
    {
        var bytes = new byte[] { 1, 2, 10 };
        var buffer = new SHA1CryptoServiceProvider().ComputeHash(bytes);
        foreach (var b in buffer)
        {
            Console.WriteLine((sbyte)b); //attention to cast           
        }
        Console.Read();
    }
于 2012-12-06T10:51:43.977 に答える
2

だから私のコメントを答えとして要約するだけです。これを参照してください: Java および C# での SHA-1 ハッシュの計算
基本的に - Java バイトは署名されていますが、C# バイトは署名されていません。両方の結果の内部表現は同じですが、適切な変換を行わないと、それらを印刷すると異なる結果が得られます。

于 2012-12-06T10:52:52.323 に答える