2012-04-11 87 views
-1

我正在向sql數據庫發送一個加密密碼(在md5中)。不小心,我發送了一個md5加密到一個整數列。我輸入的密碼是「test」,在我的數據庫中它顯示爲「5」,然後我做了一個「qwertyqwerty」的密碼,它顯示爲「2147483647」出於好奇,任何人都可以向我解釋這是怎麼回事?爲什麼int值有很大的不同?將MD5密碼發送到INT的一個mysql字段

+1

2147483647是SIGNED INT列的最大值。 – Interrobang 2012-04-11 23:04:55

+0

爲什麼你會使用md5進行密碼散列? PBKDF2或bcrypt是標準選擇。 – CodesInChaos 2012-04-12 00:01:29

回答

1

MD5不加密密碼,它將其散列。

哈希是一種單向函數,它接受給定的輸入並創建可預測的輸出(即給定的輸入總是具有相同的輸出),理想情況下甚至非常相似的輸入都會產生極大不同的輸出。

MD5哈希是128位。如果您嘗試將這些128位寫入32位SQL列,則肯定會發生一些截斷。

不理解您用於生成MD5的特定代碼,將其轉換爲整數,然後將其寫入SQL,但無法理解爲什麼在一種情況下您得到一個小數字,而在另一種情況下,您得到了簽名int的最大值。如果您想發佈代碼,我很樂意對此發表評論。

+0

這是無意的,從那時起解決了這個問題(我希望它在MD5中,不需要真正的加密),但感謝您的信息! – 2012-04-11 23:11:53

0

我不能說爲什麼第一個值顯示爲5(我必須看到散列),但是您的第二個值顯示爲它所做的,因爲這是整數列可容納的最大值。

當mysql將您的字符串MD5哈希轉換爲整數(或嘗試)時,它超出了整數可以容納的最大值,因此它保存了最大整數。

相關問題