栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java-哈希算法-最快的实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-哈希算法-最快的实现

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

此外,您想散列“字符串”。Java

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

注意:谨防URL编码!在URL中,可以将某些字节替换为以’

%
‘ 开头的序列;这旨在支持不可打印的字符,但也可以在“标准”字符上使用(例如,用“
a
” 替换“
%61
”)。这意味着两个不同的字符串(在
String.equals()
某种意义上)实际上可以表示相同的URL(就URL处理而言)。根据您的具体情况,这可能不是问题。

您应该首先尝试将Java的

MessageDigest
API与标准的(已安装的)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缓存的影响可能会对性能产生巨大影响,并且无法通过获取功能代码并单独运行来准确预测。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号