tom*_*tom 2 java passwords sha
我使用以下代码来散列传入的字符串,期望多次应用于该方法的相同内容将始终获得相同的结果.该方案将用于密码散列和以后的验证.但它似乎不起作用 - 我为相同的输入字符串获得了两个不同的blob.我的代码有什么问题或遗漏吗?
public synchronized String encrypt(String token) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA");
sha.reset();
sha.update(token.getBytes("UTF-8"));
byte[] raw = sha.digest();
System.out.println("raw = " + raw.toString());
String hash = Base64.encodeBase64(raw).toString();
return hash;
} catch (Exception e) {
}
return token;
}
Run Code Online (Sandbox Code Playgroud)
你还没有给出足够的信息,但我怀疑你被这分心了:
System.out.println("raw = " + raw.toString());
Run Code Online (Sandbox Code Playgroud)
这是怎么回事打印出像[B@30a4effe它有什么做的字节数组中的数据.你应该打印出来hash- 如果真的是相同的话,对于所有的电话应该是token相同的.
(正如Dan所说,你的方法名称不恰当:哈希不是加密.另外,请不要抓住Exception 或只是吞下这样的例外.看来token失败也很奇怪.)
编辑:如上所述,我假设Base64.encode实际上返回一个字符串,它可能不会.我建议这个base64实现是公共域并且有一个合理的API - 编码调用返回一个String,这是完全合适的.当然,你也不需要显式toString()调用......
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |