>我有两个问题 1 我有以下代码,我不知道如何从代码的另一部分使用它,即当用户注册以加密我的字符串密码时
public static final String md5(final String toEncrypt) {
try {
final MessageDigest digest = MessageDigest.getInstance("md5");
digest.update(toEncrypt.getBytes());
final byte[] bytes = digest.digest();
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(String.format("%02X", bytes[i]));
}
return sb.toString().toLowerCase();
}
catch (Exception exc) { return ""; // Impossibru! }
}
第二个问题是,当我从数据库中提取该字符串以匹配用户在编辑框中键入的内容时,我将如何解密该字符串。
- 您不应该"解密"MD5。散列函数的全部意义在于使取消散列变得非常困难。(当然,黑客有时会尝试并成功,但这是一个不同的话题。对用户的输入进行哈希处理,然后将其与数据库中经过哈希处理的密码进行比较。
- 要调用它,只需使用
String hashedPassword = md5("some person's password");
.就像普通方法一样。 - 您可能实际上应该执行一些异常处理,而不仅仅是忽略它们。至少记录它们,至少。或返回
null
,或使用throws
子句。只是不要完全忽略它们。 -
我甚至不知道第3行发生了什么......你可能应该把这些单独的线分开。另外,你的缩进
有点非常奇怪。你会花更多的时间阅读你的代码而不是写它,所以现在让它可读,你以后会感谢过去的自己。事实上,我已经看到了一个错误:catch (Exception exc) { return ""; // Impossibru! }
右括号被注释掉。
md5 是一种单向加密方法。找到加密版本的唯一方法是md5哈希字符组合,直到结果匹配