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

Я хочу зашифровать строку с помощью хэширования gnu.crypto.hash.Whirlpool.

Шифрование должно зашифровать пароль и вернуть зашифрованный pwd. шифруют (PWD);

Этот метод должен иметь реализацию для шифрования pwd с использованием gnu jars и whirlpool
алгоритм хэширования, который должен быть равен pwd, сгенерированному на сайте ниже http://hash.online-convert.com/whirlpool-generator

Я попытался с кодом ниже, но я не могу получить код 512 байт, похожий на сгенерированный сайт джакузи:

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

  public class EncryptPwdWithAPI{
public static void main(String arg[])
{
         encrypt("somepwd");
    }
public static String encrypt(String password)
{
IMessageDigest md = HashFactory.getInstance("WHIRLPOOL");
md.update(input, 0, input.length); 
byte[] digest = md.digest(); 
System.out.println( "Input : "+new String(input)+ "\nPWD : "+new String(digest)
}

}

3 ответа

Решение

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

Вот некоторый код:

import java.security.NoSuchAlgorithmException;

import jonelo.jacksum.JacksumAPI;
import jonelo.jacksum.algorithm.AbstractChecksum;

public class JacksumTest {
    public static void main(String arg[])
    {
        String password = "somepwd";
        AbstractChecksum checksum = null; 
        try { 
           checksum = JacksumAPI.getChecksumInstance("whirlpool"); 
           checksum.update(password.getBytes());
           System.out.println(checksum.getFormattedValue());
        } catch (NoSuchAlgorithmException nsae) { }
    }
}

Вы непосредственно используете байтовые значения в качестве символьных значений, вместо этого вам следует преобразовать байтовый массив в кодировку hex или base64, чтобы сравнить его со значениями на сайте джакузи. Кодек Apache Commons предоставляет функции hex и base64.

import org.apache.commons.codec.binary.Base64;
...
  Base64.encodeBase64String(digest);

@Eelke правильно, но вот как вы это делаете, кодированный пароль должен быть в переменной результата.

    IMessageDigest oldencoder = HashFactory.getInstance(Registry.WHIRLPOOL_HASH);

    byte[] input = password.getBytes();

    oldencoder.update(input, 0, input.length);

    byte[] digest = oldencoder.digest();

    result = gnu.crypto.util.Util.toString(digest).toLowerCase();
Другие вопросы по тегам