Dav*_*son 1 java md5 message-digest
我正在尝试将字符串列表中的两个字符串转换为 MD5 消息摘要。
我的字符串列表称为“用户名密码”。
try {
MessageDigest mdg = MessageDigest.getInstance("MD5");
mdg.update(usernamepassword.get(0).getBytes(), 0, usernamepassword.get(0).length());
mdg.update(usernamepassword.get(1).getBytes(), 1, usernamepassword.get(0).length());
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(UPCheck.class.getName()).log(Level.SEVERE, null, ex);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 -
答: 这是正确的做法吗?B:我该如何返回它,以便我可以在另一个类中使用每个单独的 MD5 哈希值?
答: 这是正确的做法吗?
不,有四个原因:
1)您使用默认的字符编码,而不是指定特定的编码。我建议使用 UTF-8。
2)您当前使用字符串的长度(以字符为单位)来指定要使用的字节数
3)如果您想要单独的摘要(每个字符串一个),您应该MessageDigest为每个摘要使用单独的实例,或者reset在调用之间调用
4) 目前您实际上并未对摘要进行任何操作。
我建议您将“特定编码中字符串的 MD5”提取到一个单独的方法中:
public static byte[] getMd5OfUtf8(String text) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
return digest.digest(text.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException("No MD5 implementation? Really?");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException("No UTF-8 encoding? Really?");
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以为您感兴趣的每个列表元素调用它 - 目前尚不清楚您之后要尝试对摘要做什么,但您可能希望将它们分开......
编辑:正如评论中所指出的,MD5 如今确实不是一个很好的哈希选择。像 SHA-256 这样带有盐的东西会更好,但对于真正安全的应用程序,您可能应该阅读一些有关该主题的现代文献。(我不是专家,所以不想听起来太权威。)
| 归档时间: |
|
| 查看次数: |
7305 次 |
| 最近记录: |