Хэш-функция Whirlpool не возвращает ожидаемый хеш

Согласно https://www.online-convert.com/result/952ea2f0-6d2a-4027-aebf-8309b3888ffb хэш "test", сгенерированный хеш-функцией Whirlpool:

B913D5BBB8E461C2C5961CBE0EDCDADFD29F068225CEB37DA6DEFCF89849368F8C6C2EB6A4C4AC75775D032A0ECFDFE8550573062B653FE92FC7B8FB3B7BE8D6

Теперь в следующих строках кода я пытаюсь добиться того же в Java:

import gnu.crypto.hash.HashFactory;
import gnu.crypto.hash.IMessageDigest;
import gnu.crypto.util.Util;

import java.nio.charset.Charset;

public class Main {
    public static void main(String[] args) {
        byte[] input = "test".getBytes(Charset.forName("UTF-8"));
        IMessageDigest md = HashFactory.getInstance("whirlpool");
        md.update(input, 0, input.length);
        byte[] digest = md.digest();

        System.out.println("expected: B913D5BBB8E461C2C5961CBE0EDCDADFD29F068225CEB37DA6DEFCF89849368F8C6C2EB6A4C4AC75775D032A0ECFDFE8550573062B653FE92FC7B8FB3B7BE8D6");
        System.out.println("real:     " + Util.toString(digest));
    }
}

Вывод следующий:

expected: B913D5BBB8E461C2C5961CBE0EDCDADFD29F068225CEB37DA6DEFCF89849368F8C6C2EB6A4C4AC75775D032A0ECFDFE8550573062B653FE92FC7B8FB3B7BE8D6
real:     E6B4AA087751B4428171777F1893BA585404C7E0171787720EBA0D8BCCD710DC2C42F874C572BFAE4CEDABF50F2C80BF923805D4E31C504B86CA3BC59265E7DD

С пустой строкой (аналогично selfTest) она возвращает ожидаемую строку. Я использую криптографическую библиотеку gnu 2.0.1 от https://www.gnu.org/software/gnu-crypto/.

У кого-нибудь есть подсказка, почему реальный хеш не соответствует ожидаемому?

0 ответов

Я ходил с Whirlpool и хешированием и в итоге использовал Bouncy Castle. Если я запустил следующий код, последняя строка даст мне ожидаемый результат B913....

public void bouncyCastle() {
    WhirlpoolDigest messageDigest = new WhirlpoolDigest();

    final String stringToHash = "test";
    messageDigest.reset();
    final byte[] bytes = stringToHash.getBytes();
    messageDigest.update(bytes, 0, bytes.length);

    byte[] hash = new byte[messageDigest.getDigestSize()];

    messageDigest.doFinal(hash, 0);

    System.out.println(Hex.toHexString(hash).toUpperCase());
}

Этот сайт прошел хорошую проверку на https://md5decrypt.net/en/Whirlpool/

Вот зависимость maven, которую я добавил в свой проект.

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-ext-jdk15on</artifactId>
        <version>1.64</version>
    </dependency>
Другие вопросы по тегам