我希望用Java加密和解密密码,并以加密的形式存储到数据库中。 如果它是开源的话会很棒。有什么建议/指示吗?
答案 0 :(得分:20)
这是我用来加密MD5的算法。它返回你的加密输出。
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。你永远不会使用decription用户密码。因为它始终使用MD5。这个异常非常冗余。它永远不会抛出它。
答案 1 :(得分:9)
编辑:这个答案很老。现在不鼓励使用MD5 ,因为它很容易被破坏。
我想,MD5必须足够好吗?您可以使用MessageDigest来实现它。
MessageDigest.getInstance("MD5");
还列出了其他算法here。
这是第三方版本,如果你真的想要: Fast MD5
答案 2 :(得分:9)
Jasypt 可以为您轻松简单地完成
答案 3 :(得分:3)
答案 4 :(得分:2)
我最近使用了Spring Security 3.0(结合Wicket btw),我很高兴。这是一个很好的thorough tutorial和documentation。另请参阅this tutorial,它可以很好地解释Spring Security 2的哈希/ salting /解码设置。