我正在尝试在用户注册中使用MD5加密密码,并在登录时进行匹配。我使用Mysql作为我的数据库。Mysql也提供了将密码转换为密码的选项(即MD5(MD5))..我想知道哪种加密方式更好..它是使用java代码还是mysql查询..
提前谢谢。
发布于 2012-05-22 13:59:03
不存储密码。如果它曾经在磁盘上,那么它可能会被窃取。相反,存储密码散列。使用正确的,如、或。
这里有一些你必须看的有用的链接:
希望这能有所帮助。
发布于 2012-05-22 13:57:19
由于逻辑上您的应用程序和数据库可以存在于两个单独的物理盒子中,因此如果您在应用层加密密码,然后将其移动到数据库中,这是一个更安全的选择。
从应用程序设计的角度来看,你应该考虑加密,在非常早的时候对你的密码进行哈希处理,这样你的密码就不会像普通字符串一样从一层移动到另一层。
离题:
MD5容易出现collision attack,您可以考虑使用salt,如追加电子邮件或动态生成的值来防止Rainbow Table。
发布于 2013-01-08 02:35:43
下面是我用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,但你可以比较输出,因为如果你把相同的字符串放在这个方法中,它将返回你想要解密的相同的加密output.If,你需要使用的SHA.You永远不会对始终使用MD5的用户password.For使用描述。这是一个例外,redundant.It永远不会抛出it.When你添加密码到数据库,你添加这个方法returns.To登录,你比较它们。
https://stackoverflow.com/questions/10696432
复制相似问题