加密与安全_深入了解哈希算法

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等

释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码

概述

哈希算法(Hash)又称摘要算法(Digest)。

哈希算法是一种重要的加密算法,其核心思想是将任意长度的数据映射为固定长度的哈希值,这个哈希值通常用于验证数据的完整性、索引数据和加速数据查找。

在Java中,hashCode()方法是一种哈希算法的应用。它将字符串映射为一个固定长度的整数值,并满足了哈希算法的两个重要特点:

  • 相同的输入一定会得到相同的输出
  • 不同的输入大概率得到不同的输出。

在实际编程中,我们经常需要根据对象的哈希值来进行数据存储和查找,比如使用哈希表等数据结构。为了确保正确性,如果一个类覆写了equals()方法,就必须同时覆写hashCode()方法,以保证相同的对象具有相同的哈希值,从而确保在基于哈希值的数据结构中能够正确地执行查找、插入和删除操作。


哈希碰撞

哈希碰撞指的是在哈希算法中,两个不同的输入数据经过哈希函数运算后产生了相同的哈希值。也就是说,两个不同的输入数据经过哈希函数计算后得到的哈希值是一样的。这种情况被称为哈希碰撞。

哈希碰撞可能会导致一些问题,特别是在哈希表等数据结构中。因为哈希表是通过哈希值来确定数据存储位置的,如果两个不同的键具有相同的哈希值,就会发生冲突。在发生冲突时,通常会有一些解决冲突的方法,比如链地址法、开放寻址法等。

虽然绝对避免哈希碰撞是不可能的,但好的哈希函数会尽量降低碰撞的概率。通常情况下,当输入数据足够大,哈希函数的设计足够均匀时,哈希碰撞的概率会很低。因此,在选择哈希算法和设计哈希函数时,需要考虑到哈希碰撞的可能性,尽量选择高效且低碰撞的哈希函数。


常用的哈希算法

算法 输出长度(位) 输出长度(字节)
MD5 128bits 16bytes
SHA-1 160bits 20bytes
RipeMD-160 160bits 20bytes
SHA-256 256bits 32bytes
SHA-512 512bits 64bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值