哈希算法及其應用場景


哈希算法的概念和特性 

   我們前面分享了散列表、散列函數和散列沖突,其實也可以譯作哈希表、哈希函數和哈希沖突,是一個意思。哈希算法簡單理解就是實現前面提到的哈希函數的算法,用於將任意長度的二進制值串映射為固定長度的二進制值串,映射之后得到的二進制值就是哈希值(散列值)。

   我們日常開發中最常見的哈希算法應用就是通過 md5 函數對數據進行加密了,md5 就是一個哈希函數,結合 md5 我們可以歸納出哈希算法的一般特性:

  • 從哈希值不能反向推導出原始數據(所以哈希算法也叫單向算法,不可逆);
  • 對輸入數據非常敏感,哪怕原始數據只修改了一個比特,最后得到的哈希值也大不相同;
  • 散列沖突的概率要很小,對於不同的原始數據,哈希值相同的概率非常小;
  • 哈希算法的執行效率要盡量高效,針對較長的文本,也能快速地計算出哈希值

哈希算法的應用

   1、場景一:安全加密

       日常用戶密碼加密通常使用的都是 md5、sha等哈希函數,因為不可逆,而且微小的區別加密之后的結果差距很大,所以安全性更好。

   2、場景二:唯一標識 

       比如 URL 字段或者圖片字段要求不能重復,這個時候就可以通過對相應字段值做 md5 處理,將數據統一為 32 位長度從數據庫索引構建和查詢角度效果更好,此外,還可以對文件之類的二進制數據做 md5 處理,作為唯一標識,這樣判定重復文件的時候更快捷。

   3、場景三:數據校驗

       比如從網上下載的很多文件(尤其是P2P站點資源),都會包含一個 MD5 值,用於校驗下載數據的完整性,避免數據在中途被劫持篡改。

   4、場景五:散列函數

       前面已經提到,PHP 中的 md5、sha1、hash 等函數都是基於哈希算法計算散列值

   5、場景五:負載均衡

       對於同一個客戶端上的請求,尤其是已登錄用戶的請求,需要將其會話請求都路由到同一台機器,以保證數據的一致性,這可以借助哈希算法來實現,通過用戶 ID 尾號對總機器數取模(取多少位可以根據機器數定),將結果值作為機器編號。

   6、場景六:分布式緩存 

       分布式緩存和其他機器或數據庫的分布式不一樣,因為每台機器存放的緩存數據不一致,每當緩存機器擴容時,需要對緩存存放機器進行重新索引(或者部分重新索引),這里應用到的也是哈希算法的思想。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM