在Java中是否有任何方法可以生成一个字符串的MD5哈希?


当前回答

另一种实现:Java中的快速MD5实现

String hash = MD5.asHex(MD5.getHash(new File(filename)));

其他回答

不像PHP,你可以通过调用MD5函数ie MD5 ($text)来对文本进行MD5哈希,在Java中它有点复杂。我通常通过调用一个返回md5哈希文本的函数来实现它。 首先在你的主类中创建一个名为md5hashing的函数,如下所示。

public static String md5hashing(String text)
    {   String hashtext = null;
        try 
        {
            String plaintext = text;
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.reset();
            m.update(plaintext.getBytes());
            byte[] digest = m.digest();
            BigInteger bigInt = new BigInteger(1,digest);
            hashtext = bigInt.toString(16);
            // Now we need to zero pad it if you actually want the full 32 chars.
            while(hashtext.length() < 32 ){
              hashtext = "0"+hashtext;   
            }
        } catch (Exception e1) 
        {
            // TODO: handle exception
            JOptionPane.showMessageDialog(null,e1.getClass().getName() + ": " + e1.getMessage());   
        }
        return hashtext;     
    }

现在,在需要时调用该函数,如下所示。

String text = textFieldName.getText();
String pass = md5hashing(text);

在这里,您可以看到hashtext被附加了一个0,以使其与PHP中的md5散列匹配。

如果你不需要最好的安全性,MD5是完全可以的,如果你正在做一些像检查文件完整性这样的事情,那么安全性就不是一个考虑因素。在这种情况下,您可能希望考虑一些更简单和更快的方法,例如Adler32, Java库也支持它。

另一个选择是使用Guava哈希方法:

Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();

如果你已经在用番石榴,这很方便(如果你没有,你可能应该用)。

private String hashuj(String dane) throws ServletException{
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        byte[] bufor = dane.getBytes();
        m.update(bufor,0,bufor.length);
        BigInteger hash = new BigInteger(1,m.dige`enter code here`st());
        return String.format("%1$032X", hash);

    } catch (NoSuchAlgorithmException nsae) {
        throw new ServletException("Algorytm szyfrowania nie jest obsługiwany!");
    }
}

另一种实现:Java中的快速MD5实现

String hash = MD5.asHex(MD5.getHash(new File(filename)));