首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MD5转换为Long

将MD5转换为Long
EN

Stack Overflow用户
提问于 2012-03-12 10:56:56
回答 3查看 8.1K关注 0票数 2

我有一个来自MD5 JAVA方法的16字节数组。我想把它转换成一个长整型的hashkey。我读一个按位异或的位到64是一个好主意…那么怎样才能从中获得更长的收益呢?完整的XOR和cvt的代码示例,请长。

EN

回答 3

Stack Overflow用户

发布于 2012-03-12 10:58:09

我找到的最好的解决方案(基于我的需求...混合速度和良好的散列函数)是谷歌的CityHash。输入可以是包括MD5结果的任何字节数组,并且输出是无符号64位长。

CityHash的散列分布非常好,但并不完美,而且速度非常快。

我在半小时内将CityHash从C++移植到C#。Java端口也应该很简单。

只是XORing比特并不能给出一个很好的分布(尽管无可否认,这会非常快)。

我对Java还不够熟悉,无法确切地告诉您如何从字节数组中填充long (可能有一个我不熟悉的好帮手,或者我可能弄错了Java中的一些算术细节)。不过,从本质上讲,您会想要这样做:

代码语言:javascript
复制
long a = md5[0] * 256 * md5[1] + 256 * 256 * md5[2] + 256 * 256 * 256 * md5[3];
long b = md5[4] * 256 * md5[5] + 256 * 256 * md5[6] + 256 * 256 * 256 * md5[7];
long result = a ^ b;

请注意,我没有尝试处理endianness。但是,如果您只关心一致的散列值,那么字节序应该无关紧要。

票数 4
EN

Stack Overflow用户

发布于 2013-10-18 06:42:59

芭乐有一些非常好的Hashing capabilities

代码语言:javascript
复制
Hashing.md5().hashString(s).asLong();

我相信上面的代码实际上是CityHash的,但不管怎样,它都会生成散列长度,你可以根据你的散列需求来使用它。(我尝试了@Eric J. Java代码,它看起来像CityHash 32)。

票数 4
EN

Stack Overflow用户

发布于 2012-03-14 01:41:16

为了清楚起见,加密摘要的任何部分都不再具有摘要的许多加密属性,特别是这些属性不再成立:

反转电阻(找到满足H(X))

  • Collision电阻的X(找到满足H(X) =H(Y)的X,Y))在可能的输出范围内的随机分布

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9661227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档