有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java摘要。md5Hex返回相同的值

有人能说出为什么这段Java代码返回这么多相同的MD5值吗:

public static void main(String[] args) throws Exception{
    Random rnd = new Random();
    for (int i = 0; i < 1000; i++) {
      String key = DigestUtils.md5Hex(rnd.nextFloat() + System.currentTimeMillis() + "");
      System.out.println(key + ", " + rnd.nextFloat() + System.currentTimeMillis() + "");
    }
  }

这是我得到的输出:

814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.15059251440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.599991561440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.54911111440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.0982222561440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.169987141440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.032851281440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.223390041440334190624
814788aa9b6a22bf73ff3ae5fe0c6e0c, 0.70173611440334190624
....
....
....

共 (1) 个答案

  1. # 1 楼答案

    对不起,我的错:)

    显然:

    rnd.nextFloat() + System.currentTimeMillis()
    

    只需将这两个数字相加,得到一个非常小的数字,在Java中表示为相同的字符串