惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Vercel News
Vercel News
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
量子位
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)

博客园 - 大豆男生

C# 和 OpenResty 中进行 CRC32 Linq分组后,再对分组后的每组数据进行排序,获取每组的第一条记录 WebClient 指定安全协议(Tls1.1,Tls1.2,Tls1.3) VS2019 .Net Core 3.0 Web 项目启用动态编译 IIS 上部署 ASP.NET Core 应用程序 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS 使用浏览器自定义协议启动本地程序(.EXE文件) 再谈 C# 对象二进制序列化,序列化并进行 AES 加密 腾讯防水墙(滑动验证码)的简单使用 https://007.qq.com C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率 .Net 控制台中文(简体/繁体)乱码问题 .Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的问题 .Net Core 读取配置文件 appsettings.json JavaScript 获取按键,并屏蔽系统 Window 事件 frp 初探 nginx 禁止未绑定的域名访问 .NET MVC JSON JavaScriptSerializer 字符串的长度超过 maxJsonLength 值问题的解决 async,await,Task 的一些用法 Newtonsoft.Json(Json.net) 的使用
.Net Core 中的 MurmurHash
大豆男生 · 2020-03-18 · via 博客园 - 大豆男生

    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)