使用salt哈希密码

时间:2012-03-09 09:47:41

标签: java hash passwords password-protection

我使用salt生成密码的哈希值。我的代码:

  `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);` 

我通过提供种子作为当前时间(以毫秒为单位)生成盐,我没有盐问题(我得到随机值)但不管盐是否得到相同的哈希值..

实际上salt的目的是获取不同的哈希值。 这是我的输出;        Random nubr:-2098016229(this keeps changing) Digest:[B@ca0b6(this remains same) Waht是解决方案??

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

您需要使用循环来迭代摘要中的字节并单独打印它们。

答案 2 :(得分:0)

如果打印任何引用变量,则System.out.println()函数运行来自对象类的toString()函数。 toString()的输出显示为printf() ..
默认情况下toString()返回ref对象的HaxCode  如果您想要更改它,则必须覆盖各自toString()

中的class.
digest.toString();

只打印十六进制地址。 所以你必须使用Iterate作为数组的字节并单独打印它们......