我可以使用下面的代碼插入一行。加密和解密MySQL中的MD5
USE pmdb;
INSERT INTO md5_tbl (md5_val, username, password) VALUES(MD5('abcdef'), 'usna', MD5('Aa123456'));
當我通過使用用戶名字段選擇行時,如何解密或解碼密碼?
我可以使用下面的代碼插入一行。加密和解密MySQL中的MD5
USE pmdb;
INSERT INTO md5_tbl (md5_val, username, password) VALUES(MD5('abcdef'), 'usna', MD5('Aa123456'));
當我通過使用用戶名字段選擇行時,如何解密或解碼密碼?
首先,MD5是哈希算法=沒有解密的可能(除了蠻力攻擊,但是......)
其次,不要使用MD5散列爲密碼,它是不安全的。相反,使用至少 SHA家族+技術稱爲「salting」。
與MD5的想法是,你不要再解密它。而是加密用戶提供的密碼並將其與表中存儲的值進行比較。
你不能。 MD5不是一種加密算法,它是一種哈希算法。
你要做的就是,你哈希新輸入的密碼,並將其存儲在數據庫中的哈希值進行比較:
select *
from md5_tbl
where username = ?username and password = md5(?password)
select * from md5_tbl where username = 'username' AND password = MD5('password')
不要忘了淨化輸入,以防止SQL注入攻擊。
如果你想扭轉MD5,你不能這樣做。看看RSA,如果你想加密&解密的東西。
MD5不能解密,
你應該在你的數據庫進行比較搜索你輸入的密碼的MD5值。
SELECT * FROM md5_tbl WHERE password = MD5('password') AND username = 'username'
散列不能顛倒。這不是「加密」。我建議你看看here來解釋哈希和加密之間的區別。
這就是說,我想你試圖在登錄時檢查用戶的密碼。用哈希完成的方式是:
用戶輸入的哈希密碼。
從數據庫中檢索密碼。
比較散列(byte-per-byte) - 如果它們匹配,則密碼正確。
除了其他人所說的(MD5 hashing not encryption):MD5已損壞。 –