在实现词典这种数据结构时,我们需要根据查找键来查找所对应的值,这就要求我们首先要能计算出查找键的的散列码,然后再将散列码压缩为散列表的索引。
查找键可以是一个类类型,也可以是字符串,也可以是基本类型。对于不同的类型有不同
的计算方法,下面做一下总结:
一 类类型的散列码的计算
JAVA的基类Object类中有一个方法hasCode( ),它返回一个整数散列码。所以JAVA中每个类都有此方法,但是一般我们需要重写此方法。因为此方法是根据对象的内存地址来返回一个散列码,这样内容相同的对象就返回了不同的散列码,因此要遵循覆盖次方法的一些则:
1)如果某个类覆盖了equals(),那么它也应该覆盖hansCode()
2)如果equals() 返回相同的值,那么hasCode()也应该返回相同的值。
3)在同一个程序的两次执行中,对象的散列码可以不同。
二 字符串的散列码的计算
对于字符串散列码的计算一般采用如下方法:将每个字符的Unicode值乘以一个该字符在字符串的位置的因子,散列码就是所有这些乘积的和。JAVA中的String的hasCode()就是用
一个常数31作为因子。
三 基本类型的散列码的计算
对于基本类型的散列码的计算,一般都是采用转化为int型的。在JAVA中对于long型的数据,一般用是用移位操作将64位的值转换为32位的int值。对于double和float类型一般用其封装类的Double.doubleToLongBits(key)或者是Float.floatToLongBits(key),然后通过移位和异或
来完成:(int)bits^(bits>>>32)
最后一个问题就是将散列码压缩为散列表的索引,对于这个问题通常的做法就是求模。但是一般为了元素能均匀的分配到散列表,一般散列表的元素的个数要是素数。
分享到:
相关推荐
彩虹表是一种预先计算好的哈希值与原始字符串的映射表,攻击者可以通过它快速查找哈希值对应的可能原始密码。例如,简单的密码如"1234"经过MD5散列后,可以很容易地在在线解密网站上找到其原文。为了避免这种情况,...
"16进制和ASCII码校验码计算工具"是一款专门用于计算校验码的实用程序,它能够帮助用户验证数据的完整性和准确性。下面将详细介绍这款工具以及其中涉及到的关键概念。 首先,我们来理解16进制(Hexadecimal)和...
首先需要计算BootKey,这个Key是由SAM数据库中的 секрет种子会话密钥(secret session key)和特定的字符串,以及RID计算出的MD5值。BootKey可以用来作为RC4算法的密钥,以解密加密的散列值。 BootKey的计算...
在上述代码中,我们首先获取了`MessageDigest`的实例,然后将密码转换为字节数组,再通过`digest()`方法计算散列值。最后,我们将散列值转换为十六进制字符串以便于查看和存储。 然而,仅使用散列还存在一个问题:...
总之,通过MD5算法计算授权码是一种常见的授权策略,它结合了用户特定信息和应用程序特征,提供了相对简单的实现和验证方式。然而,随着技术的发展,更安全的哈希算法(如SHA系列)和更复杂的授权机制(如许可证...
- **字符串散列码缓存**: 优化了字符串的散列码计算,提高了性能。 - **局部变量类型推断**: 这是Java 10引入的"var"关键字的扩展,允许在局部范围内使用类型推断。 - **并行全GC(G1)优化**: 对G1垃圾收集器...
散列查找技术是一种高效的数据检索方式,它通过一个特定的函数将给定的关键码转换成存储地址,即散列地址,从而直接访问数据,避免了传统的逐个比较查找。散列查找的核心在于散列函数的设计和冲突处理方法。 散列...
在实现过程中,每个记录由128个字节组成,其中包含4个字节的关键码,120个字节的数据,以及4个字节的记录标志。这些记录将被存储在一个Hash表中,以支持字典抽象数据类型(ADT)的基本操作:插入、删除和查找。 ...
### SAM的散列存储加密解密算法以及SYSKEY的计算 在Windows系统中,安全账户管理器(SAM)是负责用户账号验证的核心组件之一。它不仅管理着用户的密码策略,还涉及到了密码的散列存储与加密解密过程。本文将深入...
深度学习模型可以自动学习数据的抽象特征,这些特征对于散列码的生成更为有效,从而提高了检索的精度和速度。 【深度学习散列的主要方法】 1. **深度神经网络散列**:利用深度神经网络(如卷积神经网络CNN或递归...
"更多功能等待你的开发"意味着这款软件不仅限于基本的校验码计算,还有潜力进行功能扩展。开发者可以根据实际需求,利用提供的API接口或者源代码,开发新的模块,如添加支持更多类型的校验码、集成到其他系统中,...
MD5散列函数是一种广泛应用的密码学散列函数,它能将任意长度的数据转化为固定长度的128位(16字节)摘要。在MATLAB中实现MD5散列功能,可以用于数据完整性校验、密码存储以及文件校验等场景。下面将详细介绍MD5散列...
标题中的"SAM的散列存储加密解密算法以及SYSKEY的计算"涉及到的是Windows操作系统中的安全相关机制。SAM,全称Security Accounts Manager(安全账户管理器),是Windows系统用来存储本地用户账号信息的地方,包括...
彩虹表攻击是通过预先计算大量哈希值来查找可能的明文,而碰撞攻击则是寻找两个不同的输入产生相同哈希值的情况,这都可能弱化单向散列的安全性。 为了提高密码系统的安全性,通常会结合使用盐值(salt)和加盐哈希...
11. 散列函数:散列函数是一种将消息转换为定长的散列码的数学函数。散列函数常用于消息的身份验证和完整性检查。 12. 密码学应用:计算机密码学有很多应用,如安全通信、数字签名、身份验证和加密存储等。计算机...
这个程序可能提供了密码学的各种功能,如随机密钥生成、数据加密解密、散列值计算和数字签名验证等。这些功能对于需要处理敏感数据的用户来说,是不可或缺的。 然而,在使用此类密码计算工具前,用户必须认真考虑...
否则,它会计算键对象的散列码并找到对应的数组索引,然后遍历该索引处链表中的条目,通过`equals()`方法检查键是否已存在于链表中。如果找到匹配项,就更新值并返回旧值;否则,将新的键值对添加到链表中。 值得...
它通过计算数据的二进制位串与特定多项式相除后的余数来生成一个32位的校验码。在提供的`crc_32.cpp`文件中,你可以找到实现CRC32的C++代码,该代码可能使用了位操作和移位运算来高效地完成校验过程。 2. MD5...
- **HMAC**(Hash-based Message Authentication Code):基于散列函数的消息认证码,可以基于不同的散列算法实现,如HMAC-MD5、HMAC-SHA1等。 - **CMAC**(Cipher-based Message Authentication Code):基于分组...