在java中尝试MD5哈希

您好,我编写了一个类来为字符串输入创建哈希,但我的程序有时会为两个不同的输入提供相同的哈希。


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


但这种情况在程序执行时只发生几次。每次运行该程序时,我都会为相同的输入值生成不同的哈希值,有时还会为两个不同的输入获取相同的哈希值。


究竟发生了什么?


暮色呼如
浏览 89回答 1
1回答

MM们

&nbsp;&nbsp;byte[]&nbsp;hashValue&nbsp;=&nbsp;t.Hash("viud");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;String&nbsp;hashString&nbsp;=&nbsp;hashValue.toString();byte[] 上的 toString 将为您提供 byte[] 的内存(堆)地址。这不是你想要的。你要String&nbsp;hashString&nbsp;=&nbsp;new&nbsp;String(t.Hash("viud"));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java