我不是安全专家,因为我的应用程序大部分在本地Intranet上运行,所以谁在关心安全性? :)关于比较MD5哈希值
但实际上,我正在努力使其正确。
我在glassfish上设置了JDBC领域,我现在用MD5散列保存我的密码,使用这个代码从互联网。
public static String getMD5(String input)
{
try
{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(input.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++)
{
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100,
16).substring(1));
}
return sb.toString();
}
catch (NoSuchAlgorithmException e)
{
throw new RuntimeException(e);
}
}
现在的问题是,在更改密码的使用情况......是它只是比较,如果哈希是相等的验证,如果输入的密码 是什么在我的DB像下面这段代码一样吗?
public static void main(String[] args)
throws NoSuchAlgorithmException
{
String currentPassword = "java";
String inputValue = "java1";
String string1 = getMD5(currentPassword);
String string2 = getMD5(inputValue);
System.out.println("Is equal = " + string1.equals(string2));
}
我读过的地方,MD5是一种单向哈希,所以我不能解密回密码字符串?
对不起,如果我的问题太简单了,但我只想确认我的理解?
感谢
有观点认为,密码文件可能会受到影响,但不是盐是可笑的。盐的目的是防止预先计算的攻击。没有单独的随机盐,攻击者需要单独攻击每个密码。如果没有盐,密码可以用彩虹表简单地破解(假设密码是计算出的形式)。如果在这个答案中使用恒定的种子,则所有使用该软件的密码都可以立刻受到攻击。妥协后,软件将需要修改和重建(你想确保在危机中做到这一点?)。 – 2012-04-19 11:32:19
我同意上面的实现需要更改以随密码一起存储随机盐。然而,我确实认为有另一种输入 - 输入的另一种程度的随机性 - 确实增加了另一个安全屏障。在没有Web服务器的情况下,数据库是否会受到威胁?还是可能会有SQL注入漏洞暴露数据库的内容?在这种特殊情况下,增加这个额外的秘密意味着攻击者也必须将网络实例损害到数据库内预先编译好的值。 – 2012-04-19 14:52:09
感谢您的补充信息David! – 2012-04-20 01:17:20