如果我按照你的问题,那么你可以用这样的东西来做 –
String sql = "select md5(CONCAT(md5(?), ?))";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, password);
ps.setString(2, pwdSalt);
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
另一种可能的解决方案是在Java中执行hash和salt –
// A password hashing method.
public static String hashPassword(String in, String salt) {
try {
MessageDigest md = MessageDigest.getInstance("MD5"); //
md.update(salt.getBytes()); //
md.update(in.getBytes());
// md.update(salt.getBytes()); //
byte[] out = md.digest();
return bytesToHex(out); //
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
private static String bytesToHex(byte[] byteArr) {
StringBuilder sb = new StringBuilder();
Formatter fmt = new Formatter(sb);
for (byte b : byteArr) {
fmt.format("%02x", b);
}
return sb.toString();
}
最后,我不会在2014年使用MD5.SHA-256将是我的偏好.