2012-03-05 173 views
0

我有一个数以千计的md5加密密码的数据库,我需要迁移到sha256。通过使用md5访问保留旧密码并使用sha256加密新密码来实现这一点最安全的方法是什么?谢谢。如何从md5迁移到sha256加密

+2

当你在这里,你可能想迁移到PBKDF2和盐。您将不得不存储salt和PBKDF2结果而不是密码。 SHA-256(这是一种安全散列,不是一种加密类型)仍然可以用于彩虹表等。 – 2012-03-05 22:24:32

+0

有趣!是否有任何vbscript(经典的asp)基于盐的PBKDF2实现? – afazolo 2012-03-06 01:11:42

+0

在谷歌的帮助下,我了解到,我可以为每个用户使用随机生成的字符串作为盐。要检查用户提供的密码是否有效,我会结合Salt提供的密码,取出散列,并将其与存储在数据库中的散列进行比较,对吧?我的问题是:一个盐可以是一个MD5加密字符串? – afazolo 2012-03-06 03:27:36

回答

5

除了为sha256创建新列,您还可以使用现有列。因为sha256散列比md5散列长很多,所以可以通过查看散列长度来检测散列算法。

+0

我也这么认为。只是对安全性有怀疑。 – afazolo 2012-03-05 18:45:51

1

我想为sha256散列添加一个新列。这样,您可以在登录时检查新列的空值,并在有权访问明文密码时保存新的哈希值。

2

如果可能,请使用PBKDF2或bcrypt。平原SHA-2速度太快。

如果你不能使用其中任何一个,那么你至少应该遍历SHA-256两三千次密码猜测攻击减缓:

var hash = SHA256(SHA256(salt)+password) 
for(int i=0; i<10000; i++) 
    hash = SHA256(hash); 
return hash; 

请记住,每个用户都需要有一种不同的盐,通常与密码散列一起存储。每个应用盐是不够的。


对于升级,我会使用旧的散列作为新功能的输入。这样,现有的哈希会获得升级的大部分安全性提升,而无需用户登录。不要保留旧的MD5散列。

然后在每个用户的第一次登录时,将他的哈希值升级到不再使用MD5的全新哈希值。

+0

如果给出散列,即使使用MD5,仍然很难找到生成该散列的相应字符串。通常使用反向查找表或暴力破解散列,通过向输入添加新字母来快速降低概率,因此将长随机盐连接到密码已足够。 – Calmarius 2015-05-30 14:24:50