java hash实现_Java-哈希算法-最快的实现

小编典典

首先,速度过高。在声明给定算法“太慢”之前,您应该采取措施。在大多数情况下,哈希函数的速度不会产生明显的变化。如果您对安全性存有疑虑,则首先选择一个足够安全的哈希函数,然后才担心性能。

此外,您想散列“字符串”。Java String在内部是char表示Unicode代码点(实际上是使用UTF-16编码代码点的Unicode

16位代码单元)的值数组中的一部分。哈希函数将一系列位或字节作为输入。因此,您将必须执行一个转换步骤,例如str.getBytes("UTF-8"),以一串字节的形式获取您的字符串。与散列本身相比,转换步骤的成本很有可能不可忽略。

注意:谨防URL编码!在URL中,可以将某些字节替换为以’ %‘ 开头的序列;这旨在支持不可打印的字符,但也可以在“标准”字符上使用(例如,用“

a” 替换“

%61”)。这意味着两个不同的字符串(在String.equals()某种意义上)实际上可以表示相同的URL(就URL处理而言)。根据您的具体情况,这可能不是问题。

您应该首先尝试将Java的MessageDigestAPI与标准的(已安装的)JCE提供程序一起使用(即调用MessageDigest.getInstance("SHA-256")),然后对结果进行处理。从理论上讲,JCE可以将调用映射到使用“本机”代码(用C或汇编语言编写)的实现,这将比使用Java更快。

话虽如此…

sphlib是C和Java中许多加密哈希函数的开源实现。该代码已针对速度进行了优化,实际上,Java版本比Sun

/

Oracle提供的标准JRE更快。万一先前的链接失败了,请使用此链接(有时主机主服务器由于维护而关闭,现在看来是这样)(警告:下载10

MB)。该档案还包含一份报告(在2010年第二届SHA-3候选人大会上发表),该报告提供了一些平台上SHA-2的性能测量数据以及即将推出的SHA-3的14个“第二轮”候选人。

但是,您确实应该制定现场基准测试。例如,对L1缓存的影响可能会对性能产生巨大影响,并且无法通过获取功能代码并单独运行来准确预测。

2020-11-01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值