MD5消息摘要Java

时间:2013-03-10 20:03:04

标签: java md5 message-digest

我正在尝试将两个字符串从字符串列表转换为MD5消息摘要。

My String List名为“usernamepassword”。

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);
        }

我的问题是 -

答:这是正确的做法吗? B:我如何返回它,以便我可以在另一个类中使用每个单独的MD5哈希?

2 个答案:

答案 0 :(得分:4)

  

答:这是正确的做法吗?

不,原因有四:

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?");
    }
}

然后你可以为你感兴趣的每个列表元素调用它 - 不清楚你之后用摘要的是什么,但是你可能想要它们分开..

编辑:正如评论中所指出的,MD5现在确实不是一个很好的哈希选择。像SHA-256这样的盐会更好,但对于真正安全的应用程序,你应该阅读一些关于这个主题的现代文献。 (我不是专家,所以不要听起来太权威。)

答案 1 :(得分:1)

使用apache commons中的DigestUtils类。几种实用方法可以帮助您计算/显示md5或其他一些常见的哈希函数。