我想用Java加密和解密密码并以加密的形式存储到数据库中。如果它是开源的,那就太好了。任何建议/指示?
我想用Java加密和解密密码并以加密的形式存储到数据库中。如果它是开源的,那就太好了。任何建议/指示?
编辑:这个答案是旧的。现在不鼓励使用 MD5,因为它很容易被破坏。
MD5 一定对你来说足够好,我想?您可以使用MessageDigest实现它。
MessageDigest.getInstance("MD5");
这是它的第三方版本,如果你真的想要: Fast MD5
Jasypt可以为你轻松简单的做到
您可以使用java.security.MessageDigest
withSHA
作为您的算法选择。
以供参考,
我最近为此使用了 Spring Security 3.0(与 Wicket 结合),并且对它非常满意。这是一个很好的详尽教程和文档。另请查看本教程,它很好地解释了 Spring Security 2 的散列/加盐/解码设置。
这是我使用 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。您永远不会使用用户密码的解密。为此总是使用 MD5。那个异常是非常多余的。它永远不会抛出它。