2012-03-05 28 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