我使用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是解决方案??
答案 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作为数组的字节并单独打印它们......