关于加密:使用Java加密和解密密码

Encrypt and decrypt a password in Java

我想在Java中加密和解密密码,并以加密的形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗?


这是我使用MD5加密的算法。它返回加密的输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   public class CryptWithMD5 {
   private static MessageDigest md;

   public static String cryptWithMD5(String pass){
    try {
        md = MessageDigest.getInstance("MD5");
        byte[] passBytes = pass.getBytes();
        md.reset();
        byte[] digested = md.digest(passBytes);
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<digested.length;i++){
            sb.append(Integer.toHexString(0xff & digested[i]));
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException ex) {
        Logger.getLogger(CryptWithMD5.class.getName()).log(Level.SEVERE, null, ex);
    }
        return null;


   }
}

无法解密MD5,但可以比较输出,因为如果在此方法中放置相同的字符串,它将具有相同的加密输出。如果要解密,则需要使用sha。永远不会对用户密码使用deccription。为此,请始终使用md5。该异常是相当多余的。它不会抛出它。


Jasipt可以轻松简单地为你做这件事


编辑:这个答案很旧。现在不鼓励使用MD5,因为它很容易被破坏。

我想MD5对你来说一定足够好吧?您可以使用messagedigest来实现它。

MessageDigest.getInstance("MD5");

这里还列出了其他算法。

这里有第三方版本,如果你真的想:快速MD5


您可以使用java.security.MessageDigestSHA作为您的算法选择。

供参考,

请在此处尝试可用的示例


我最近使用了SpringSecurity3.0(与WicketBTW结合使用),对此我非常满意。这里有一个非常全面的教程和文档。另外,请看一下本教程,它很好地解释了SpringSecurity2的散列/跳跃/解码设置。