0

我有两个问题 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! }
}

第二个问题是当我从数据库中提取该字符串以匹配用户在编辑框中键入的内容时,我将如何解密该字符串。

4

2 回答 2

8
  1. 您不应该“解密” MD5。散列函数的全部意义在于使其很难取消散列。(当然,黑客尝试并有时会成功,但这是一个不同的话题。)您对用户的输入进行哈希处理,然后将其与数据库中的哈希密码进行比较。
  2. 要调用它,只需使用String hashedPassword = md5("some person's password");. 就像普通的方法一样。
  3. 您可能实际上应该进行一些异常处理,而不是仅仅忽略它们。至少记录它们,至少或 return null,或使用throws子句。只是不要完全忽略它们。
  4. 我什至不知道第 3 行发生了什么……您可能应该将这些单独的行分开。另外,你的缩进有点奇怪。你会花更多的时间阅读你的代码而不是写它,所以现在让它可读,你以后会感谢过去的自己。事实上,我已经看到了一个错误:

    catch (Exception exc) { return ""; // Impossibru! }
    

    右括号被注释掉。

于 2013-10-08T21:06:28.097 回答
1

md5 是一种单向加密方法。找到加密版本的唯一方法是对字符进行 md5 哈希组合,直到结果匹配

于 2013-10-08T21:06:36.913 回答