如何在数据库中存储加密的密码?

我试图在JSP和Servlets的帮助下以加密的forms将密码存储到数据库中。 我怎么能这样做?

自编算法存在安全风险,维护起来很痛苦。
MD5 不安全 。

使用jBcrypt提供的bcrypt算法(开源):

// Hash a password String hashed = BCrypt.hashpw(password, BCrypt.gensalt()); // Check that an unencrypted password matches or not if (BCrypt.checkpw(candidate, hashed)) System.out.println("It matches"); else System.out.println("It does not match"); 

如果您使用Maven,可以通过在pom.xml中插入以下依赖项来获取库(如果有更新的版本可以请告诉我)

  de.svenkubiak jBCrypt 0.4.1  

尝试这样的方法来加密您的数据。

 MessageDigest md = MessageDigest.getInstance("MD5"); ...... synchronized (md) { md.reset(); byte[] hash = md.digest(plainTextPassword.getBytes("CP1252")); StringBuffer sb = new StringBuffer(); for (int i = 0; i < hash.length; ++i) { sb.append(Integer.toHexString((hash[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3)); } String password = sb.toString(); } 

你也可以使用下面的东西。 下面是一个crypt方法,它接受一个字符串输入并返回并加密字符串。 您可以将密码传递给此方法。

 public static String crypt(String str) { if (str == null || str.length() == 0) { throw new IllegalArgumentException( "String to encrypt cannot be null or zero length"); } StringBuffer hexString = new StringBuffer(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte[] hash = md.digest(); for (int i = 0; i < hash.length; i++) { if ((0xff & hash[i]) < 0x10) { hexString.append("0" + Integer.toHexString((0xFF & hash[i]))); } else { hexString.append(Integer.toHexString(0xFF & hash[i])); } } } catch (NoSuchAlgorithmException e) { } return hexString.toString(); }