2012-06-13 616 views
1

我可以使用下面的代碼插入一行。加密和解密MySQL中的MD5

USE pmdb; 
INSERT INTO md5_tbl (md5_val, username, password) VALUES(MD5('abcdef'), 'usna', MD5('Aa123456')); 

當我通過使用用戶名字段選擇行時,如何解密或解碼密碼?

+0

除了其他人所說的(MD5 hashing not encryption):MD5已損壞。 –

回答

3

首先,MD5是哈希算法=沒有解密的可能(除了蠻力攻擊,但是......)

其次,不要使用MD5散列爲密碼,它是不安全的。相反,使用至少 SHA家族+技術稱爲「salting」。

2

與MD5的想法是,你不要再解密它。而是加密用戶提供的密碼並將其與表中存儲的值進行比較。

2

你不能。 MD5不是一種加密算法,它是一種哈希算法。

你要做的就是,你哈希新輸入的密碼,並將其存儲在數據庫中的哈希值進行比較:

select * 
from md5_tbl 
where username = ?username and password = md5(?password) 
2

彩虹表? ;-)

MD5是一種單向哈希算法。它不能被「解密」。

+0

在事實發生後的幾個月裏,駕車經歷了倒計時嗎?垃圾... – tomfanning

2
select * from md5_tbl where username = 'username' AND password = MD5('password') 

不要忘了淨化輸入,以防止SQL注入攻擊。

如果你想扭轉MD5,你不能這樣做。看看RSA,如果你想加密&解密的東西。

3

MD5不能解密,

你應該在你的數據庫進行比較搜索你輸入的密碼的MD5值。

SELECT * FROM md5_tbl WHERE password = MD5('password') AND username = 'username' 
3

散列不能顛倒。這不是「加密」。我建議你看看here來解釋哈希和加密之間的區別。

這就是說,我想你試圖在登錄時檢查用戶的密碼。用哈希完成的方式是:

  1. 用戶輸入的哈希密碼。

  2. 從數據庫中檢索密碼。

  3. 比較散列(byte-per-byte) - 如果它們匹配,則密碼正確。