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