java实现哈希算法_Java – 哈希算法 – 最快的实现

第一件事:速度被高估了在声明给定的算法“太慢”之前,您应该采取措施。大多数时候,哈希函数的速度也没有明显的差别。如果您有关于安全性的质疑,那么首先选择一个足够安全的哈希函数,然后只担心性能问题。

而且,你想要哈希“字符串”。 Java字符串在内部是来自代表Unicode代码点(实际上是使用UTF-16编码代码点的Unicode 16位代码单元)的char值数组的块。散列函数将一个位或字节序列作为输入。所以你必须做一个转换步骤,例如str.getBytes(“UTF-8”),以字符串形式获取字符串。与哈希本身相比,转换步骤很可能具有不可忽略的成本。

注意:注意URL编码!在URL中,可以用以’%’符号开始的序列替换一些字节;这意味着支持不可打印的字符,但也可以在“标准”字符上使用(例如,用’a’替换’a’)。这意味着两个不同的字符串(以String.equals()的方式)实际上可以表示相同的URL(就URL处理而言)。根据你的情况,这可能是也可能不是一个问题。

您应该首先尝试使用Java的MessageDigest API与标准(已安装)JCE提供程序(即调用MessageDigest.getInstance(“SHA-256”)),并对其结果进行分析。理论上,JCE可以将调用映射到具有“本机”代码(用C或汇编编写)的实现,这将比使用Java更快。

话虽如此…

sphlib是C和Java中许多加密散列函数的开源实现。该代码已经针对速度进行了优化,实际上,Java版本的速度比Sun / Oracle提供的标准JRE更快。如果以前的链接发生故障(主机服务器有时候关机进行维护,现在看起来就是这样),请使用this link(警告:10 MB下载)。档案还包含一份报告(2010年second SHA-3 candidate conference年提交),其中提供了SHA-3和SHA-3的“第二轮”候选人在几个平台上的一些测量性能数据。

但你真的应该做出现状基准。例如,对L1高速缓存的影响可能对性能产生巨大的影响,并且无法通过使用功能代码并将其独立运行来准确预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值