在 java 中尝试 MD5 哈希
Trying MD5 Hash in java
您好,我写了一个 class 来为字符串输入创建哈希,但我的程序有时会为两个不同的输入提供相同的哈希。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Test {
public byte[] Hash(String input) throws NoSuchAlgorithmException
{
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte b[] = messageDigest.digest(input.getBytes());
return b;
}
public static void main(String args[]) throws NoSuchAlgorithmException
{
Test t = new Test();
byte[] hashValue = t.Hash("viud");
String hashString = hashValue.toString();
while(hashString.length()<32)
{
hashString = "0" + hashString;
}
System.out.println(hashString);
}
}
当我对函数 Hash() 的输入是 "viud" 时,我得到的结果是 --> 0000000000000000000000[B@13e8c1c
当我的输入字符串是 "Hello" 时,我得到的结果也是 --> 0000000000000000000000[B@13e8c1c
但这种情况在程序执行中只发生过几次。
每次我 运行 程序时,我都会为相同的输入值生成不同的哈希值,有时还会为两个不同的输入生成相同的哈希值。
到底发生了什么??
byte[] hashValue = t.Hash("viud");
String hashString = hashValue.toString();
byte[] 上的 toString 将为您提供 byte[] 的内存(堆)地址。这不是你想要的。你要
String hashString = new String(t.Hash("viud"));
您好,我写了一个 class 来为字符串输入创建哈希,但我的程序有时会为两个不同的输入提供相同的哈希。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Test {
public byte[] Hash(String input) throws NoSuchAlgorithmException
{
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte b[] = messageDigest.digest(input.getBytes());
return b;
}
public static void main(String args[]) throws NoSuchAlgorithmException
{
Test t = new Test();
byte[] hashValue = t.Hash("viud");
String hashString = hashValue.toString();
while(hashString.length()<32)
{
hashString = "0" + hashString;
}
System.out.println(hashString);
}
}
当我对函数 Hash() 的输入是 "viud" 时,我得到的结果是 --> 0000000000000000000000[B@13e8c1c 当我的输入字符串是 "Hello" 时,我得到的结果也是 --> 0000000000000000000000[B@13e8c1c
但这种情况在程序执行中只发生过几次。 每次我 运行 程序时,我都会为相同的输入值生成不同的哈希值,有时还会为两个不同的输入生成相同的哈希值。
到底发生了什么??
byte[] hashValue = t.Hash("viud");
String hashString = hashValue.toString();
byte[] 上的 toString 将为您提供 byte[] 的内存(堆)地址。这不是你想要的。你要
String hashString = new String(t.Hash("viud"));