Вычисление хэшей SHA-1 в Java и C #

Расчет хэшей SHA-1 в Java и C #

Я пытаюсь воспроизвести логику приложения Java в приложении C #. Частично это связано с генерацией хэша пароля SHA-1. К сожалению, я не могу получить те же результаты от Java и C #.

C# Output  : 64  0a  b2 ba e0 7b  ed c4 c1 63  f6 79  a7 46  f7 ab 7f  b5 d1 fa
Java Output: 164 10a b2 ba e0 17b ed c4 c1 163 f6 179 a7 146 f7 ab 17f b5 d1 fa 

Чтобы попытаться выяснить, что происходит, я использовал отладчик в Eclipse и Visual Studio.

1. Check values of byte[] key:

    Java: { 84, 101, 115, 116 }
    C#  : { 84, 101, 115, 116 }

2. Check value of byte[] hash:

    Java: { 100 10 -78 -70 -32 123 ... }
    C#  : { 100 10  78 186 224 123 ... }

Я читал другие сообщения об этом , которые в основном относятся к кодировке входной строки, но, похоже, мне это не помогло. Я предполагаю, что это как-то связано с байтами со знаком и без знака, но я не добился большого прогресса в этом направлении. Любая помощь будет принята с благодарностью.

Спасибо,

Карл


Версия Java:

public void testHash() {

    String password = "Test";

    byte[] key = password.getBytes();

    MessageDigest md = MessageDigest.getInstance("SHA-1");

    byte[] hash = md.digest(key);

    String result = "";
    for ( byte b : hash ) {
        result += Integer.toHexString(b + 256) + " ";
    }

    System.out.println(result);

}

Версия C #:

public void testHash() {

    String password = "Test";

    byte[] key = System.Text.Encoding.Default.GetBytes(password);

    SHA1 sha1 = SHA1Managed.Create();

    byte[] hash = sha1.ComputeHash(key);

    String result;
    foreach ( byte b in hash ) {
        result += Convert.ToInt32(b).ToString("x2") + " ";
    }

    Console.WriteLine(result);

}
8
задан Karle 27 July 2011 в 11:39
поделиться