日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

        编程问答

        算法--Hash算法及其应用场所

        發布時間:2024/7/5 编程问答 45 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 算法--Hash算法及其应用场所 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

        文章目錄

          • 1.Hash算法定義
          • 2.應用
            • 2.1 安全加密
            • 2.2 唯一標識
            • 2.3 數據校驗
            • 2.4 散列函數
            • 2.5 負載均衡
            • 2.6 數據分片
            • 2.7 分布式存儲

        1.Hash算法定義

        • 哈希算法:將任意長度的二進制值串映射為固定長度的二進制值串,這個映射的規則就是哈希算法,而通過原始數據映射之后得到的二進制值串就是哈希值
        • 設計一個優秀的哈希算法并不容易,需要滿足的幾點要求:
          1· 從哈希值不能反向推導出原始數據(所以哈希算法也叫單向哈希算法);
          2· 對輸入數據非常敏感,哪怕原始數據只修改了一個Bit,最后得到的哈希值也大不相同;
          3· 散列沖突的概率要很小,對于不同的原始數據,哈希值相同的概率非常小;
          4· 哈希算法的執行效率要盡量高效,針對較長的文本,也能快速地計算出哈希值。

        2.應用

        2.1 安全加密

        • 最常用于加密的哈希算法是MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和SHA(Secure Hash Algorithm,安全散列算法)。
        • 還有很多其他加密算法,比如DES(Data Encryption Standard,數據加密標準)、AES(Advanced Encryption Standard,高級加密標準)。
        • 加密的哈希算法有兩點格外重要。第一點是很難根據哈希值反向推導出原始數據,第二點是散列沖突的概率要很小。

        2.2 唯一標識

        • 海量圖片查找
        • 給每一個圖片取一個唯一標識。比如,從圖片的二進制碼串開頭取100個字節,從中間取100個字節,從最后再取100個字節,然后將這300個字節放到一塊,通過哈希算法(比如MD5),得到一個哈希字符串,用它作為圖片的唯一標識。通過這個唯一標識來判定圖片是否在圖庫中。

        2.3 數據校驗

        • BT下載電影,從多個機器上分別下載,最后合并成一個。
        • 對 n 個文件塊分別取哈希值,并且保存在種子文件中。只要文件塊的內容有一丁點兒的改變,最后計算出的哈希值就會完全不同。當文件塊下載完成之后,我們可以通過相同的哈希算法,對下載好的文件塊逐一求哈希值,然后跟種子文件中保存的哈希值比對。如果不同,說明這個文件塊不完整或者被篡改了,需要再重新從其他宿主機器上下載這個文件塊。

        2.4 散列函數

        • 散列函數對于散列算法沖突的要求要低很多。出現個別散列沖突,只要不是過于嚴重,我們都可以通過開放尋址法或者鏈表法解決。
        • 是否能反向解密也并不關心。散列函數中用到的散列算法,更加關注散列后的值是否能平均分布,散列函數執行的快慢,也會影響散列表的性能,所以,散列函數用的散列算法一般都比較簡單,比較追求效率。

        思考:區塊鏈

        • 區塊鏈是一塊塊區塊組成的,每個區塊分為兩部分:區塊頭和區塊體。
        • 區塊頭保存著自己區塊體和上一個區塊頭的哈希值。
        • 因為這種鏈式關系和哈希值的唯一性,只要區塊鏈上任意一個區塊被修改過,后面所有區塊保存的哈希值就不對了。
        • 區塊鏈使用的是SHA256哈希算法,計算哈希值非常耗時,如果要篡改一個區塊,就必須重新計算該區塊后面所有的區塊的哈希值,短時間內幾乎不可能做到。

        分布式系統應用:

        2.5 負載均衡

        • 我們可以通過哈希算法,對客戶端IP地址或者會話ID計算哈希值,將取得的哈希值與服務器列表的大小進行取模運算,最終得到的值就是應該被路由到的服務器編號。我們就可以把同一個IP過來的所有請求,都路由到同一個后端服務器上。

        2.6 數據分片

        • 假設有1億張圖片,很顯然,在單臺機器上構建散列表是行不通的。因為單臺機器的內存有限,而1億張圖片構建散列表顯然遠遠超過了單臺機器的內存上限。
        • 對數據進行分片,然后采用多機處理。我們準備n臺機器,讓每臺機器只維護某一部分圖片對應的散列表。
        • 每次從圖庫中讀取一個圖片,計算唯一標識,然后與機器個數n求余取模,得到的值就對應要分配的機器編號,然后將這個圖片的唯一標識和圖片路徑發往對應的機器構建散列表。
        • 要判斷一個圖片是否在圖庫中的時候,我們通過同樣的哈希算法,計算這個圖片的唯一標識,然后與機器個數n求余取模。假設得到的值是k,那就去編號k的機器構建的散列表中查找。

        2.7 分布式存儲

        • 海量數據緩存在n臺機器上,哪天緩存不夠了,加一臺機器,之前數據是通過和n求模得到的,現在全失效了?
        • 我們需要一種方法,使得在新加入一個機器后,并不需要做大量的數據搬移。這時候,一致性哈希算法就要登場了。
        • 假設我們有k個機器,數據的哈希值的范圍是[0,MAX]。我們將整個范圍劃分成m個小區間(m遠大于k),每個機器負責m/k個小區間。當有新機器加入的時候,我們就將某幾個小區間的數據,從原來的機器中搬移到新的機器中。這樣,既不用全部重新哈希、搬移數據,也保持了各個機器上數據數量的均衡。

        總結

        以上是生活随笔為你收集整理的算法--Hash算法及其应用场所的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。