0

我想使用 gnu.crypto.hash.Whirlpool 散列加密一个字符串。

加密应该加密密码并且应该返回加密的密码。加密(密码);

此方法应具有使用 gnu jars 和漩涡
散列算法加密 pwd 的实现,该算法应等于以下站点 http://hash.online-convert.com/whirlpool-generator生成的 pwd

我尝试使用下面的代码,但无法获得类似于生成的漩涡站点的 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)
}

}

4

3 回答 3

3

是的,但我期待带有 512 字节的漩涡 hascode,这等于在线哈希码生成器生成的代码。我用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) { }
    }
}
于 2012-08-13T16:58:35.003 回答
0

@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();
于 2012-08-13T12:38:10.180 回答
0

您直接将字节值用作字符值,而不是将字节数组转换为十六进制或 base64 编码,以将其与漩涡网站上的值进行比较。Apache Commons Codec 提供 hex 和 base64 函数。

import org.apache.commons.codec.binary.Base64;
...
  Base64.encodeBase64String(digest);
于 2012-08-12T11:18:16.600 回答