使用gnu-crypto jar使用whirlpool算法加密pwd的Java示例

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

加密应加密密码,并应返回加密的密码。 加密(PWD);

这个方法应该有使用gnu jar和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) } 

}

雅正确,但我期待whirlpool hascode具有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 Codec提供hex和base64function。

 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();