我正在研究這個PHP項目,我有很多地方正在使用md5。我甚至用過很多次,但今天仍然不清楚這個功能在做什麼。我意識到它會解密傳入的值,但如何解除它以恢復原來的值。也許我不清楚整個過程中,如果任何人有關於過程的信息我會非常感激PHP md5解釋
回答
MD5是散列函數
散列函數是任何好 - 定義的 程序或數學函數 ,其將大量的可能大小的數據轉換成小數據。 散列函數返回的值稱爲散列值,散列碼,哈希總和,校驗和或 只是散列值。
參見http://en.wikipedia.org/wiki/Hash_function。
散列函數的強度取決於其反向難度。
MD5不解密任何東西。它被認爲是一種單向哈希算法。對於給定的輸入,它返回一個固定長度的字符串。此外,對於兩個相似但不相同的給定輸入,返回的md5值不可預測。
散列對很多事情都有好處,例如文件驗證。雖然不是主題,但如果你拿了一個文件併爲它計算了一個散列,然後向某人發送了一個文件和一個散列,他們可以很容易地驗證他們是通過散列它自己來正確接收文件的,然後斷言它們的散列與提供的散列匹配。
另一個例子是諸如網站身份驗證之類的東西。驗證用戶後,您開始一個會話,並在該會話中存儲md5(用戶名+時間),並在用戶瀏覽器中存儲cookie(用戶名+時間),然後在後續頁面請求中檢查會話哈希是否與cookie哈希來斷言用戶是他們說他們是誰。對於這種類型的東西,Md5並不是一個好的散列,但散列可以幫助解決這類問題。 sha1對於這個應用程序甚至sha512來說都是更好的哈希函數。
MD5 is a one way encryption hash。
它不解密任何東西,而是創建一個哈希碼,您可以使用它來與其他MD5哈希值進行比較。它曾經是,如果兩個哈希匹配你可以確信兩個輸入是相同的。最終發現了幾起衝突,然後是故意造成衝突的方式(出於安全目的,降低了MD5的價值)。這是一個相當快的算法,所以仍然可以使用它(檢查傳輸大量數據期間的損壞情況,以及其他可能提供其他形式的保護以防止真正的攻擊的其他地方)。
MD5是一個不加密本身,而是一種生成校驗和的算法。無論您傳入什麼數據,您都將得到一個固定長度的十六進制(僅0-9和A-F)字符串。這個想法是,除了傳入的數據之外,其他任何數據都不可能導致相同的MD5字符串。由於結果是固定長度,而您的數據可以是任意長度,所以顯然將會是其他數據會導致相同的MD5字符串,但再一次,您很難找到它。
因此,沒有辦法實際「解密」一個MD5字符串。你所做的是,你從一些數據生成它,然後從其他數據生成它,並比較兩個MD5字符串。如果它們相同,則可以確定(儘管不是100%),兩個輸入數據是相同的。
MD5是一個密碼散列函數。加密散列函數具有特殊屬性,它們根據輸入生成結果,但幾乎不可能恢復原始輸入。這有點「單向加密」。另外,通過傳遞相同的數據通過密碼散列函數,您應該始終得到相同的結果。
儘管它們不是加密的首選,但因爲它只是單向的,但它們在存儲密碼時非常有用。這是因爲,正如我所說的,相同的輸入總是會有相同的結果。這使得以純文本形式存儲密碼,甚至不需要它的可恢復版本(如加密密碼)。相反,您只需從密碼生成一個散列並將其存儲在數據庫中。每當有人嘗試登錄時,就會從數據庫中檢索散列,然後根據用戶輸入的密碼生成新的散列,並將兩者進行比較。
請注意,MD5是不是很安全,你應該嘗試使用一些其他更安全的散列函數來代替,如SHA512:
<?php
$hash = hash('sha512', $data);
?>
相關鏈接:
- 1. php代碼md5哈希解釋
- 2. md5在PHP解密
- 3. 解碼md5:我想解碼php的get方法中的md5
- 4. PHP MD5(MD5)哈希
- 5. PHP - preg_match解釋
- 6. PHP SERVER_TIMEZONE_OFFSET解釋
- 7. Preg_match php解釋
- 8. 比較PERL md5()和PHP md5()
- 9. PHP MD5與MySQL的md5
- 10. NodeJS md5'bytestring'like PHP md5(str,true)
- 11. MD5密碼解密
- 12. 解釋php輸出
- 13. php preg_match_all的解釋
- 14. 解釋 - > in PHP
- 15. PHP線程解釋
- 16. 解釋php if statment
- 17. PHP解釋器Opcache
- 18. 解釋php函數
- 19. PHP不解釋,在
- 20. 用PHP解釋SQL
- 21. PHP代碼解釋
- 22. 解密MD5 iphone
- 23. md5排除php
- 24. PHP MD5哈希
- 25. PHP MD5實現
- 26. 解密MD5哈希
- 27. 「解密」MD5在c + +
- 28. c#md5和php md5不是馬赫
- 29. 在PHP和JavaScript中使用MD5的MD5
- 30. PHP md5與JAVA md5的區別
另請參見[在所有編程語言中MD5加密散列函數輸出是否相同?](http://stackoverflow.com/questions/3450983/will-the-md5-cryptographic-hash-function-output-是相同的所有程序設計語言) – 2010-08-17 22:38:25