我想使用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)
}
}
答案 0 :(得分:3)
雅正确,但我期待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) { }
}
}
答案 1 :(得分:0)
您直接使用字节值作为字符值,而应将字节数组转换为十六进制或base64编码,以将其与漩涡网站上的值进行比较。 Apache Commons Codec提供了hex和base64函数。
import org.apache.commons.codec.binary.Base64;
...
Base64.encodeBase64String(digest);
答案 2 :(得分: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();