Java и Php возвращает разные хеши

Итак, код PHP:

$result = hash("whirlpool","xxx".$password."zzz");

ДЖАВА:

import gnu.crypto.Registry;
import gnu.crypto.hash.HashFactory;
import gnu.crypto.hash.IMessageDigest;

public class WhirlpoolHash {

    String result;

    WhirlpoolHash(String pass) {

        String to_encode = "xxx"+pass+"zzz";

        IMessageDigest old_encoder = HashFactory.getInstance(Registry.WHIRLPOOL_HASH);
        byte[] input = to_encode.getBytes();
        old_encoder.update(input, 0, input.length);
        byte[] digest = old_encoder.digest();
        this.result = gnu.crypto.util.Util.toString(digest).toLowerCase();

    }

    public String Get() {

        return this.result;
    }
}

И результат варьируется. Мне нужен класс Java, чтобы вернуть то же значение, что и PHP. У меня есть пароли, хранящиеся в MySQL DB UTF-8 в кодировке, сгенерированные PHP, и мне нужно сравнить их с данными, отправленными приложением JavaFX.

Конечно, я могу послать незашифрованный пароль и сделать это с помощью php, но я не хочу.

1 ответ

Решение

Так что пример Java для шифрования pwd с помощью алгоритма whirlpool с использованием gnu-crypto jar был ответом.

Я не знаю почему но jonelo.jacksum.JacksumAPI дает результат так же, как PHP.

Поздний ответ, но если это поможет кому-то другому.

У меня была почти такая же проблема, и я использовал Bouncy Castle на Java. После некоторых проб и ошибок я получил хеши с Whirlpool, соответствующие моему PHP-хешу, который выглядел похожим на ваш. Предполагая, что вы передаете пароль:

    WhirlpoolDigest messageDigest = new WhirlpoolDigest();

    final String convertedHash = "xxx" + password + "yyy";
    messageDigest.reset();
    final byte[] bytes = convertedHash.getBytes();
    messageDigest.update(bytes, 0, bytes.length);

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

    messageDigest.doFinal(hash, 0);

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

Самой большой проблемой для меня были последние шаги - doFinal() и Hex.toHexString() ...

Моя зависимость от maven выглядела так:

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