2012-03-09 73 views
3

散列密码我产生具有salt.My码的密码的哈希值:通过提供作为种子以毫秒为单位的当前时间使用盐

`String psw="hello"; 
    String tobehashed=""; 
    tobehashed=salt+psw; 
    MessageDigest md = MessageDigest.getInstance("SHA-256"); 
    byte[] digest = md.digest(tobehashed.getBytes()); 
    System.out.println("Digest:"+digest);` 

我已生成的盐,我有盐没有问题(I m得到随机值),但不管盐我得到相同的哈希值。

实际上盐的目的是获得不同的哈希值.. 这是我的输出; Random nubr:-2098016229(this keeps changing) Digest:[[email protected](this remains same) Waht是解决方案?

回答

4

要打印出来的digest.toString()的结果,其在字节阵列的情况下确实字节转换成有意义的输出。它只打印[B(这是字节数组的代码),@,然后是十六进制地址。随着Java获得更多的经验,您会经常看到这个输出。

您将需要使用循环遍历摘要中的字节并逐个打印它们。

+0

谢谢,它的工作,我得到不同的值,如果我迭代循环.. – user10101 2012-03-09 10:05:49

+0

但如果我需要比较后面的哈希值,我必须通过迭代循环比较两个哈希值。是吗? – user10101 2012-03-09 10:07:14

+0

@ user1258724:请参阅http://stackoverflow.com/questions/630808/compare-two-arrays-of-primitives-in-java获取答案。 – 2012-03-09 10:10:51

4

B @ ca0b6不是字节数组的内容,它是toString()表示。迭代数组的字节并单独打印。

+0

但如果我需要比较后面的散列值,我必须通过迭代循环来比较两个散列值。它是正确的吗? – user10101 2012-03-09 10:11:26

0

如果您打印任何参考变量,然后System.out.println()函数运行toString()函数来自对象类。 toString()的输出显示为printf() ..
默认toString()返回你的ref对象的HaxCode。
如果你想改变它,那么你必须在各自的class.

digest.toString(); 

只是打印十六进制地址重写toString()。 所以你必须使用迭代数组的字节,并单独打印它们...