.Net Core 中的 MurmurHash

来源:https://www.cnblogs.com/anjou/archive/2020/03/18/MurmurHash.html
-Advertisement-
Play Games

MurmurHash 是一種非加密型哈希演算法,適用於一般的哈希檢索操作,具有高性能、低碰撞率的特點。由 Google 的工程師 Austin Appleby 於2008年創建。MurmurHash 與其它流行的哈希函數相比,對於規律性較強的 Key,其隨機分佈特征表現的更好。非加密意味著著相對 MD ...


    MurmurHash 是一種非加密型哈希演算法,適用於一般的哈希檢索操作,具有高性能、低碰撞率的特點。由 Google 的工程師 Austin Appleby 於2008年創建。MurmurHash 與其它流行的哈希函數相比,對於規律性較強的 Key,其隨機分佈特征表現的更好。非加密意味著著相對 MD5,SHA 這些函數它的性能更高(性能是 MD5 等加密演算法的十倍以上),也正是由於它的這些優點,所以雖然它出現於2008年,但目前已經廣泛應用到 Redis 等眾多著名的軟體中。MurmurHash 提供了兩種長度的哈希值,32 bit,128 bit。MurmurHash 的英文為:(multiply and rotate) and (multiply and rotate)。

    最新版本是 MurmurHash3,基於MurmurHash2 改進了一些小瑕疵,使得速度更快,尤其對大塊的數據,具有較高的平衡性與低碰撞率。

    .Net Core 使用 MurmurHash 要先使用 NuGet 添加 System.Data.HashFunction.MurmurHash 這個包。

//using System.Data.HashFunction.MurmurHash;
byte[] srcBytes = Encoding.UTF8.GetBytes("001");
// HashSizeInBits=32 or 128
var cfg = new MurmurHash3Config() { HashSizeInBits = 32,  Seed = 0 };
var mur = MurmurHash3Factory.Instance.Create(cfg);
var hv = mur.ComputeHash(srcBytes);
var base64 = hv.AsBase64String();
var hashBytes = hv.Hash;

對於規律性較強的 key,MurmurHash 的隨機分佈特征表現更良好,簡單測試如下:
String   Hash值(Base64)
001 => oPj2oQ
002 => HWDyLA
003 => Qiz+PQ

雖然字元串 001,002,003 有規律,但其 Hash 值 oPj2oQ,HWDyLA,Qiz+PQ 已經沒有規律了;

 

String   Hash值(Base64)
ade => HGGhPQ
bde => Ourovw
cde => slivpw

雖然字元串 ade,bde,cde 有規律,但其 Hash 值 HGGhPQ,Ourovw,slivpw 已經沒有規律了。

 

HashSizeInBits=128時, Base64的Hash值長度是22位;HashSizeInBits=32時, Base64的Hash值長度只有6位;6位長度Hash值,很適合用於一般的哈希檢索。

英文 (multiply and rotate) and (multiply and rotate)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JAVA反射概念及使用詳解 一、什麼是反射? 反射:框架設計的靈魂 框架:半成品軟體。可以在框架的基礎上進行軟體開發,簡化編碼 反射:將類的各個組成部分封裝為其他對象,這就是反射機制 ​ 好處: ​ 可以在程式運行過程中,操作這些對象。 ​ 可以解耦,提高程式的可擴展性。 圖片來源https://b ...
  • @2020.3.18 1、寫函數,,用戶傳入修改的文件名,與要修改的內容,執行函數,完成批量修改操作 2、寫函數,計算傳入字元串中【數字】、【字母】、【空格] 以及 【其他】的個數 3、寫函數,判斷用戶傳入的對象(字元串、列表、元組)長度是否大於5。 4、寫函數,檢查傳入列表的長度,如果大於2,那麼 ...
  • 數組 聲明 類型[] 數組名//建議使用 類型 數組名[] 數組聲明後不會分配記憶體,必須new 數組名 = new 類型[大小] e.g. int [] arr = new int[8]; 使用 數組下標從0開始 賦值 數組名[下標]=數據 e.g. arr[5]=8; 訪問 數組名[下標] e.g ...
  • 前言 今天在測試環境發佈 服務,發現死活找不到錯誤的地方,錯誤日誌也生成,然後就一頓 ,一頓 ,發現日誌就截止到我發服務之前, 服務結束的地方,如圖所示。 WTF,why,我是丈二和尚摸不著頭腦,後來我發現他這個服務不是像我之前那種 啟動的,他這個是使用 啟動的。 正文 第六感告訴我,系統啟動日誌中 ...
  • 如果同一個IP短時間內多次訪問統一網頁,可能會被系統識別出是爬蟲,因此使用代理IP可以很大程度上解決這一問題 常用的代理有: 西刺免費代理:www.xicidaili.com 快代理:www.kuaidaili.com 代理雲:www.dailiyun.com 那麼我們如何知道自己的代理IP是否已經 ...
  • 作者:李小翀 鏈接:https://www.zhihu.com/question/22764869/answer/31277656 來源:知乎 1.初始 初始階段 的小型系統 應用程式、資料庫、文件等所有的資源都在一臺伺服器上通俗稱為LAMP特征:應用程式、資料庫、文件等所有的資源都在一臺伺服器上。 ...
  • ABP vNext(後文簡稱Abp)是 Volo 公司堪稱藝術品級的應用開發框架,它基於領域驅動設計(DDD)的思維,創新地採用了模塊化的設計。Abp 目前無疑是 ASP.NET Core 開發框架中最先進和最優雅的存在。筆者認為,憑藉絕妙的模塊化設計和絲滑的開發體驗,Abp 有望超越 Spring ...
  • 聚焦於 Xamarin 的 NET Conf 是一項免費的為期一天的直播活動,來自社區和.NET產品團隊的演講者正在使用Xamarin技術構建本機移動應用程式!Xamarin允許您使用C#(而不是Java和Swift)為Android和iOS構建本機移動應用程式。3月23日(星期一)下午8:00(太 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...