[原]VB.NET常用的哈希算法集 差不多30种.

问题描述

VB.NET常用的哈希算法集.其中包括了著名的暴雪的哈希,T33哈希.......全部是网上的C/C++代码改的(VB.NET的资源真的很少).不同的哈希算法在分布式,布降过滤器,位图MAP等等应用得比较多...''</summary>PublicClassMyUnchecked#Region"UInt64"<StructLayout(LayoutKind.Explicit)>PublicStructureUncheckedUInt64<FieldOffset(0)>PrivatelongValueAsUInt64<FieldOffset(0)>PrivateintValueLoAsUInt32<FieldOffset(4)>PrivateintValueHiAsUInt32'//PrivateSubNew(newLongValueAsUInt64)longValue=newLongValueEndSubPublicOverloadsSharedWideningOperatorCType(valueAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(value)EndOperatorPublicOverloadsSharedWideningOperatorCType(valueAsUncheckedUInt64)AsUInt64Returnvalue.longValueEndOperatorPublicOverloadsSharedOperator*(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue*y)EndOperatorPublicOverloadsSharedOperator/(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue/y)EndOperatorPublicOverloadsSharedOperator^(xAsUncheckedUInt64,yAsDouble)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue^y)EndOperatorPublicOverloadsSharedOperator^(xAsUncheckedUInt64,yAsUInt32)AsUncheckedUInt64ReturnNewUncheckedUInt64(MyConvert.MyPower(x.longValue,y))EndOperatorPublicOverloadsSharedOperatorXor(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValueXory)EndOperatorPublicOverloadsSharedOperator+(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue+y)EndOperatorPublicOverloadsSharedOperator-(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue-y)EndOperatorPublicOverloadsSharedOperator<<(xAsUncheckedUInt64,yAsInt32)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue<<y)EndOperatorPublicOverloadsSharedOperator>>(xAsUncheckedUInt64,yAsInt32)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue>>y)EndOperatorPublicOverloadsSharedOperatorAnd(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValueAndy)EndOperatorPublicOverloadsSharedOperator=(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue)EndOperatorPublicOverloadsSharedOperator<>(xAsUncheckedUInt64,yAsUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(x.longValue<>y)EndOperatorPublicOverloadsSharedOperatorNot(xAsUncheckedUInt64)AsUncheckedUInt64ReturnNewUncheckedUInt64(Notx.longValue)EndOperatorEndStructure#EndRegionEndClass

解决方案

解决方案二:
#Region"哈希算法"'''<summary>'''和HashCMyMap基本一样.'''</summary>'''<paramname="Key"></param>'''<returns></returns>PublicSharedFunctionHashDJB(KeyAsString)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=5381DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToLhash=((hash<<5)+hash)+Asc(KeyCharArr(i))+3NextReturnhashEndFunction'''<summary>'''和HashCMyMap基本一样.'''</summary>'''<paramname="KeyByte"></param>'''<returns></returns>PublicSharedFunctionHashDJB(ByValKeyByte()AsByte)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=5381DimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToLhash=((hash<<5)+hash)+KeyByte(i)+3NextReturnhashEndFunction'''<summary>'''BKDR哈希'''</summary>'''<paramname="Key"></param>'''<paramname="seed">种子.最好是使用质数.</param>'''<returns></returns>PublicSharedFunctionHashBKDR(ByValKeyAsString,OptionalseedAsLong=131)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToL-1hash=(hash*seed)+Asc(KeyCharArr(i))+3NextReturn(hashAnd&H7FFFFFFF)EndFunction'''<summary>'''BKDR哈希'''</summary>'''<paramname="KeyByte"></param>'''<paramname="seed">种子数</param>'''<returns></returns>PublicSharedFunctionHashBKDR(ByValKeyByte()AsByte,OptionalseedAsLong=131)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToL-1hash=(hash*seed)+KeyByte(i)+3NextReturn(hashAnd&H7FFFFFFF)EndFunctionPublicSharedFunctionHashRS(KeyAsString,OptionalseedAsLong=131)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimbAsUInt64=378551DimaAsUInt64=63689DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToL-1hash=(hash*a)+Asc(KeyCharArr(i))a=a*bNextReturn(hashAnd&H7FFFFFFF)EndFunctionPublicSharedFunctionHashRS(KeyByte()AsByte,OptionalseedAsLong=131)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimbAsUInt64=378551DimaAsUInt64=63689DimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToL-1hash=(hash*a)+KeyByte(i)a=a*bNextReturn(hashAnd&H7FFFFFFF)EndFunction

解决方案三:
PublicSharedFunctionHashSDBM(KeyAsString)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToL-1hash=Asc(KeyCharArr(i))+(hash<<6)+(hash<<16)-hashNextReturn(hashAnd&H7FFFFFFF)EndFunctionPublicSharedFunctionHashSDBM(KeyByte()AsByte)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToL-1hash=KeyByte(i)+(hash<<6)+(hash<<16)-hashNextReturn(hashAnd&H7FFFFFFF)EndFunctionPublicSharedFunctionHashJS(KeyAsString)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=1315423911DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToL-1hash=hashXor(((hash<<5)+Asc(KeyCharArr(i))+(hash>>2)))NextReturnhashEndFunctionPublicSharedFunctionHashJS(KeyByte()AsByte)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=1315423911DimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToL-1hash=hashXor(((hash<<5)+KeyByte(i)+(hash>>2)))NextReturnhashEndFunctionPublicSharedFunctionHashPJW(KeyAsString)AsUInt64DimBitsInUnsignedIntAsUInt64=CLng(4*8)DimThreeQuartersAsUInt64=CLng((BitsInUnsignedInt*3)/4)DimOneEighthAsUInt64=CLng(BitsInUnsignedInt/8)DimHighBitsAsUInt64=CLng(&HFFFFFFFF)<<(BitsInUnsignedInt-OneEighth)DimhashAsMyUnchecked.UncheckedUInt64=0DimtestAsUInt64=0DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForIAsInt32=0ToLhash=(hash<<OneEighth)+Asc(KeyCharArr(I))If((test=hashAndHighBits)<>0)Thenhash=((hashXor(test>>ThreeQuarters))And(NotHighBits))EndIfNextReturnhashEndFunctionPublicSharedFunctionHashPJW(KeyByte()AsByte)AsUInt64DimBitsInUnsignedIntAsUInt64=CLng(4*8)DimThreeQuartersAsUInt64=CLng((BitsInUnsignedInt*3)/4)DimOneEighthAsUInt64=CLng(BitsInUnsignedInt/8)DimHighBitsAsUInt64=CLng(&HFFFFFFFF)<<(BitsInUnsignedInt-OneEighth)DimhashAsMyUnchecked.UncheckedUInt64=0DimtestAsUInt64=0DimLAsInt32=KeyByte.Length-1ForIAsInt32=0ToLhash=(hash<<OneEighth)+KeyByte(I)If((test=hashAndHighBits)<>0)Thenhash=((hashXor(test>>ThreeQuarters))And(NotHighBits))EndIfNextReturnhashEndFunctionPublicSharedFunctionHashAP(KeyAsString)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=&HAAAAAAAADimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayForiAsInt32=0ToLIf((iAnd1)=0)Thenhash=hashXor(((hash<<7)XorAsc(KeyCharArr(i))*(hash>>3)))Elsehash=hashXor((Not((hash<<11)+Asc(KeyCharArr(i))Xor(hash>>5))))EndIfNextReturnhashEndFunctionPublicSharedFunctionHashAP(KeyByte()AsByte)AsUInt64DimhashAsMyUnchecked.UncheckedUInt64=&HAAAAAAAADimLAsInt32=KeyByte.Length-1ForiAsInt32=0ToLIf((iAnd1)=0)Thenhash=hashXor(((hash<<7)XorKeyByte(i)*(hash>>3)))Elsehash=hashXor((Not((hash<<11)+KeyByte(i)Xor(hash>>5))))EndIfNextReturnhashEndFunctionPublicSharedFunctionHashDEK(KeyAsString)AsUInt64DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayDimhashAsMyUnchecked.UncheckedUInt64=L+1ForiAsInt32=0ToLhash=((hash<<5)Xor(hash>>27))XorAsc(KeyCharArr(i))NextReturnhashEndFunctionPublicSharedFunctionHashDEK(KeyByte()AsByte)AsUInt64DimLAsInt32=KeyByte.Length-1DimhashAsMyUnchecked.UncheckedUInt64=L+1ForiAsInt32=0ToLhash=((hash<<5)Xor(hash>>27))XorKeyByte(i)NextReturnhashEndFunctionPublicSharedFunctionHashELF(KeyAsString)AsUInt64DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayDimhashAsMyUnchecked.UncheckedUInt64=0DimxAsLong=0ForiAsInt32=0ToLhash=(hash<<4)+Asc(KeyCharArr(i))x=hashAnd&HF0000000LIfx<>0Thenhash=hashXor(x>>24)EndIfhash=hashAnd(Notx)NextReturnhashEndFunctionPublicSharedFunctionHashELF(KeyByte()AsByte)AsUInt64DimLAsInt32=KeyByte.Length-1DimhashAsMyUnchecked.UncheckedUInt64=0DimxAsLong=0ForiAsInt32=0ToLhash=(hash<<4)+KeyByte(i)x=hashAnd&HF0000000LIfx<>0Thenhash=hashXor(x>>24)EndIfhash=hashAnd(Notx)NextReturnhashEndFunctionPrivateSharedcryptTable(&H100*5-1)AsUInt64PrivateSharedIsInitcryptTableAsBoolean=FalsePublicSharedSubHashBlizzardInit()DimseedAsUInt64=&H100001Dimindex1AsUInt64=0Dimindex2AsUInt64=0DimIAsUInt64DimKKKAsUInt64=0Forindex1=0To&H100-1index2=index1ForI=0To4Dimtemp1,temp2AsUInt64seed=(seed*125+3)Mod&H2AAAABtemp1=(seedAnd&HFFFF)<<&H10seed=(seed*125+3)Mod&H2AAAABtemp2=(seedAnd&HFFFF)cryptTable(index2)=(temp1Ortemp2)'//|index2+=&H100NextNextIsInitcryptTable=TrueEndSub'''<summary>'''暴雪公司出名的哈希码.'''测试了二千万GUID,没有重复.但运算量比较大。'''</summary>'''<paramname="key"></param>'''<paramname="HasType">HasType=0,1,2</param>'''<returns></returns>PublicSharedFunctionHashBlizzard(ByValKeyAsString,OptionalHasTypeAsLong=0)AsUInt64IfIsInitcryptTable=FalseThenHashBlizzardInit()DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayDimseed1AsMyUnchecked.UncheckedUInt64=&H7FED7FEDDimseed2AsMyUnchecked.UncheckedUInt64=&HEEEEEEEEDimLoopIDAsInt32=0While(LoopID<L)DimascCodeAsInt32=Asc(KeyCharArr(LoopID))seed1=cryptTable((HasType<<8)+ascCode)Xor(seed1+seed2)seed2=ascCode+seed1+seed2+(seed2<<5)+3LoopID+=1EndWhileReturnseed1EndFunction'''<summary>'''暴雪公司著名的HashMap.'''测试了二千万GUID,没有重复.但运算量比较大。'''</summary>'''<paramname="KeyByte"></param>'''<paramname="HasType">HasType=[0,1,2]</param>'''<returns></returns>PublicSharedFunctionHashBlizzard(KeyByte()AsByte,OptionalHasTypeAsLong=0)AsUInt64IfIsInitcryptTable=FalseThenHashBlizzardInit()DimLAsInt32=KeyByte.Length-1Dimseed1AsMyUnchecked.UncheckedUInt64=&H7FED7FEDDimseed2AsMyUnchecked.UncheckedUInt64=&HEEEEEEEEDimLoopIDAsInt32=0While(LoopID<L)DimascCodeAsInt32=KeyByte(LoopID)seed1=cryptTable((HasType<<8)+ascCode)Xor(seed1+seed2)seed2=ascCode+seed1+seed2+(seed2<<5)+3LoopID+=1EndWhileReturnseed1EndFunction

解决方案四:
'''<summary>'''经典times33算法。简单高效。[这个使用移位代替*33]'''测试一千万。没有重复哈希值。'''</summary>'''<paramname="Key"></param>'''<returns></returns>PublicSharedFunctionHashCMyMap(KeyAsString)AsUInt64DimnHashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayDimIAsInt32=0While(I<L)nHash=(nHash<<5)+nHash+Asc(KeyCharArr(I))+3I+=1EndWhileReturnnHashEndFunction'''<summary>'''经典times33算法。简单高效。[这个使用移位代替*33]'''测试一千万。没有重复哈希值。'''</summary>'''<paramname="KeyByte"></param>'''<returns></returns>PublicSharedFunctionHashCMyMap(KeyByte()AsByte)AsUInt64DimnHashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=KeyByte.Length-1DimIAsInt32=0While(I<L)nHash=(nHash<<5)+nHash+KeyByte(I)+3I+=1EndWhileReturnnHashEndFunction'''<summary>'''经典的Time算法。简单,高效。'''Ngix使用的是time31,TokyoCabinet使用的是time37'''小写英文词汇适合33,大小写混合使用65。time33比较适合的是英文词汇的hash.'''</summary>'''<paramname="Key"></param>'''<paramname="seed">种子数。31,33,37。。。</param>'''<returns></returns>PublicSharedFunctionHashTimeMap(KeyAsString,seedAsInt16)AsUInt64DimnHashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=Key.Length-1DimKeyCharArr()AsChar=Key.ToArrayDimIAsInt32=0While(I<L)nHash=seed*nHash+nHash+Asc(KeyCharArr(I))+3I+=1EndWhileReturnnHashEndFunction'''<summary>'''经典的Time算法。简单,高效。'''Ngix使用的是time31,TokyoCabinet使用的是time37'''小写英文词汇适合33,大小写混合使用65。time33比较适合的是英文词汇的hash.'''</summary>'''<paramname="KeyByte"></param>'''<paramname="seed">种子质数。31,33,37。。。</param>'''<returns></returns>PublicSharedFunctionHashTimeMap(KeyByte()AsByte,seedAsUInt32)AsUInt64DimnHashAsMyUnchecked.UncheckedUInt64=0DimLAsInt32=KeyByte.Length-1DimIAsInt32=0While(I<L)nHash=seed*nHash+nHash+KeyByte(I)+3I+=1EndWhileReturnnHashEndFunction#EndRegion

解决方案五:
Mark一下

时间: 2024-10-14 16:55:39

[原]VB.NET常用的哈希算法集 差不多30种.的相关文章

用Python实现通过哈希算法检测图片重复的教程

 Iconfinder 是一个图标搜索引擎,为设计师.开发者和其他创意工作者提供精美图标,目前托管超过 34 万枚图标,是全球最大的付费图标库.用户也可以在 Iconfinder 的交易板块上传出售原创作品.每个月都有成千上万的图标上传到Iconfinder,同时也伴随而来大量的盗版图.Iconfinder 工程师 Silviu Tantos 在本文中提出一个新颖巧妙的图像查重技术,以杜绝盗版. 我们将在未来几周之内推出一个检测上传图标是否重复的功能.例如,如果用户下载了一个图标然后又试图通过上

用Python实现通过哈希算法检测图片重复的教程_python

Iconfinder 是一个图标搜索引擎,为设计师.开发者和其他创意工作者提供精美图标,目前托管超过 34 万枚图标,是全球最大的付费图标库.用户也可以在 Iconfinder 的交易板块上传出售原创作品.每个月都有成千上万的图标上传到Iconfinder,同时也伴随而来大量的盗版图.Iconfinder 工程师 Silviu Tantos 在本文中提出一个新颖巧妙的图像查重技术,以杜绝盗版. 我们将在未来几周之内推出一个检测上传图标是否重复的功能.例如,如果用户下载了一个图标然后又试图通过上传

浅析常用局部敏感哈希算法

上一年记录的东西,整理下... 需要代码联系我QQ:791909235,本人不做义务咨询. 一.哈希检索概述 LSH是Locality Sensitive Hashing的缩写,也翻译为局部敏感哈希,是一种通过设计满足特殊性质即局部敏感的哈希函数,提高相似查询效率的方法.虽然从正式提出距今不过十余年,由于其局部敏感的特殊性质,以及在高维数据上相当于k-d树等方法的优越性,LSH被广泛地运用于各种检索(包括并不仅限于文本.音频.图片.视频.基因等)领域. 1.1 检索分类 在检索技术中,索引一直需

一致性哈希算法的应用及实现

一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法, 由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域. 1997年发表的学术论文中介绍了"一致性哈希"如何应用于用户易变的分布式Web服务中. 一致性哈希可用于实现健壮缓存来减少大型Web应用中系统部分失效带来的负面影响.(维基百科) hash算法的单调性 Hash 算法的一个衡量指标是单调性( Monotonicity ),定义如下: 单调性是指如果已经有一些内容通过哈希分派

一致性哈希算法的Java实现

一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了. 因此,引入了一致性哈希算法: 把数据用hash函数(如MD5),映射到一个很大的空间里,如图所示.数据的存储时,先得到一个hash值,对应到这个环中的每个位置,如k1

【转载】五分钟理解一致性哈希算法(consistent hashing)

   转载自:http://blog.csdn.net/cywosp/article/details/23397179 简介:     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用.     一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义

.NET平台开源项目速览(12)哈希算法集合类库HashLib

    .NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部分情况下已经满足了需求,而且.NET实现的都是目前国际上比较权威的,标准化的算法,所以还是安全可靠的.但也有一些场合,需要自己实现一些安全散列算法.不仅仅是学习,也可以进行测试以及相关研究.而今天要介绍的正式这样一个包括了目前几乎所有散列函数算法实现的.NET开源组件,大家可以实际使用,查看或者修改等.满足更多不同人,不同层次的需求.那就看看相关

关于哈希算法,可能和这个板块无关

问题描述 百度百科上的解释:----- 哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值.哈希值是一段数据唯一且极其紧凑的数值表示形式.如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值.要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性.------------------------------------------------------------------------如上所说任意

一致性哈希算法以及其PHP实现详细解析_php技巧

在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Response Time).加权法(Weighted )等.其中哈希算法是最为常用的算法. 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务. 常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按