Hash碰撞

article/2025/11/11 12:50:11

Hash碰撞

什么是Hash碰撞

Hash碰撞是指两个不同的输入值,经过哈希函数的处理后,得到相同的输出值,这种情况被称之为哈希碰撞。

  • 例如:两个不同的对象(object1和object2的值)经过Hash函数计算后的,得到的hash值相同,object2应放到object1的位置,但是存储桶中的位置已经被object1占用了,导致冲突

为什么会发生Hash碰撞

哈希表是一种数据结构,它使用哈希函数将键映射到存储桶中。哈希函数将键转换为索引,这个索引指向哈希表中的一个桶。哈希表的目的是提供一种快速的查找方法,它可以在较快的时间内查找一个键。

当然,这需要一个好的哈希函数,它可以将键均匀地分布在哈希表中。如果哈希函数不好,就会出现哈希碰撞,这会导致性能下降。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fULBcw7u-1683776857310)(E:\Java笔记\Java优化\Hash\Hash碰撞\Hash碰撞.assets\image-20230511110034878.png)]

解决Hash碰撞

在这种情况下,我们可以使用链式哈希表来解决哈希碰撞的问题。链式哈希表是一种将哈希值相同的元素存储在同一个链表中的哈希表。当发生哈希碰撞时,我们只需要将新元素添加到对应的链表中即可。这样可以保证哈希表的性能和正确性。

package com.sin.demo;import java.util.LinkedList;/*** @CreateName SIN* @CreateDate 2023/05/11 11:04* @description 链式哈希表,用来解决hash碰撞的问题。*              具体实现:将hash值相同的元素存储在同一个链表中,当发生hash碰撞时,*                      只需要将新的元素添加到对应的链表中即可,这样可以保证hash表的新能和正确性*/
public class ChainedHashTable<K, V> {//声明一个链表数组private LinkedList<Entry<K, V>>[] table;//记录长度private int size;/*** 构造方法* @param capacity 传入hash表容量*/public ChainedHashTable(int capacity) {//初始化链表数组长度table = new LinkedList[capacity];//初始长度为0size = 0;}/*** 添加元素* @param key 键* @param value 值*/public void put(K key, V value) {//计算哈希值int index = hash(key);//如果当前索引位置为nullif (table[index] == null) {//创建一个新的链表在当前索引table[index] = new LinkedList<>();}// 遍历当前索引的链表for (Entry<K, V> entry : table[index]) {//判断链表中是否有这个key键,if (entry.getKey().equals(key)) {//如果有则更新对应的value值entry.setValue(value);//直接返回return;}}//如果不存在将新的元素(键值对)添加到链表中table[index].add(new Entry<>(key, value));//增加长度size++;}/*** 获取元素* @param key 键* @return 返回对应的值*/public V get(K key) {//计算hash值int index = hash(key);//如果当前值为nullif (table[index] == null) {//返回nullreturn null;}//遍历该位置的链表for (Entry<K, V> entry : table[index]) {//判断链表中是否有这个key键,if (entry.getKey().equals(key)) {//存在则返回元素的值return entry.getValue();}}//否则返回nullreturn null;}/*** 删除元素* @param key 所需要删除的key* @return false:删除失败,true:删除成功*/public boolean remove(K key) {//计算hash值int index = hash(key);//如果当前位置为nullif (table[index] == null) {//返回falsereturn false;}//遍历该位置的链表for (Entry<K, V> entry : table[index]) {//判断链表中是否有这个key键,if (entry.getKey().equals(key)) {//从链表中删除该元素table[index].remove(entry);//减小长度size--;//返回truereturn true;}}//返回falsereturn false;}/*** 获取长度* @return 返回长度*/public int size() {return size;}/*** 计算hash值* @param key 键* @return 返回自定义的hash值(可按照自己的规则编写)*/private int hash(K key) {//绝对值并取模return Math.abs(key.hashCode()) % table.length;}/*** 静态内部类* @param <K>* @param <V>*/private static class Entry<K, V> {//key,键private K key;//value,值private V value;/*** 构造方法* @param key 传入的key* @param value 传入的值*/public Entry(K key, V value) {//初始化键和值this.key = key;this.value = value;}// 获取键public K getKey() {// 返回键return key;}// 获取值public V getValue() {// 返回值return value;}// 设置值public void setValue(V value) {// 更新值this.value = value;}}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdBDF8ea-1683776857311)(E:\Java笔记\Java优化\Hash\Hash碰撞\Hash碰撞.assets\image-20230511113659169.png)]

解析:

方法返回值说明
ChainedHashTable构造方法,创建对象时需要传入具体的长度
putvoid添加元素,先计算key的hash值,判断是否有这个key,没有新建一个l链表并添加到数组元素的末尾。有则更新对应的value
getV获取元素,先计算key的hash值,判断是否有这个key,没有则返回null,然后遍历链表,有则返回对应的value,没有返回null
removeboolean删除元素,先计算key的hash值,判断是否有这个key,没有则返回false,然后遍历链表,有则删除对应的value,没有返回false
sizeint获取长度
hashint计算hash值

代码持续开发中:不合理之处,可指导指导!!!

img


http://chatgpt.dhexx.cn/article/yFMdxqD0.shtml

相关文章

浅谈“越权访问”

一&#xff1a;漏洞名称&#xff1a; 越权访问漏洞 描述&#xff1a; 越权访问&#xff0c;这类漏洞是指应用在检查授权&#xff08;Authorization&#xff09;时存在纰漏&#xff0c;使得攻击者在获得低权限用户帐后后&#xff0c;可以利用一些方式绕过权限检查&#xff0c;访…

逻辑越权——垂直、水平越权

水平越权&#xff1a;通过更换的某个ID之类的身份标识&#xff0c;从而使A账号获取&#xff08;修改、删除等&#xff09;B账号数据。 垂直越权&#xff1a;使用低权限身份的账号&#xff0c;发送高权限账号才能有的请求&#xff0c;获得其高权限的操作。 未授权访问&#xff1…

横向越权和纵向越权(水平越权、垂直越权)

越权&#xff1a;顾名思义&#xff0c;就是获得了本不应该有的权限。 我们都喜欢创造一些复杂的词汇&#xff0c;而实际上这些词就是一个代词&#xff0c;根本没有那么复杂。 越权漏洞往往是基于业务逻辑的漏洞&#xff0c;这样的漏洞很难被WAF保护。 越权的分类 按照方向…

越权访问

目录 概念 分类 pikachu--水平越权 源码分析 pikachu---垂直越权 源码分析 概念 越权访问&#xff08;Broken Access Control,BAC&#xff09;是web中一种常见的漏洞&#xff0c;且越权漏洞属于逻辑漏洞&#xff0c;是由于权限校验的逻辑不够严谨导致的&#xff0c;所以越…

Web 攻防之业务安全:越权访问漏洞 测试.

Web 攻防之业务安全&#xff1a;越权访问漏洞 测试. 由于没有对用户权限进行严格的判断&#xff0c;导致低权限的账号&#xff08;比如普通用户&#xff09;可以去完成高权限账号&#xff08;比如超级管理员&#xff09;范围内的操作。&#xff08;比如&#xff1a;通过更换的…

越权漏洞系列

0x01&#xff1a;越权的定义 越权漏洞是我们在测试过程中遇到比较多的漏洞&#xff0c;我们可以这样来理解越权漏洞&#xff0c;一个用户A一般只能够对自己本身的信息进行增删改查&#xff0c;然而由于后台开发人员的疏忽&#xff0c;没有在信息进行增删改查时候进行用户判断&…

java越权问题

关于java项目越权问题 问题描述实现思路具体代码 项目上线前做了安全扫描&#xff0c;安全部门扫描出一个关于越权的问题。这个问题是在刚开始开发接口的时候没有考虑到的一个事情。&#xff08;此项目是有关于用户所拥有的项目和活动权限的问题。&#xff09; 问题描述 首先…

越权 漏洞

一、越权漏洞描述 越权访问&#xff08;Broken Access Control&#xff0c;简称 BAC&#xff09;是 Web 应用程序中一种常见的漏洞&#xff0c;由于其存在范围广、危害大&#xff0c;被 OWASP 列为 Web 应用十大安全隐患的第二名。 该漏洞是指应用在检查授权时存在纰漏&#x…

详解越权漏洞

文章目录 1.1. 漏洞原理1.2. 漏洞分类1.2.1. 水平越权1.2.2. 垂直越权 1.3. 漏洞举例1.3.1. 水平越权1.3.2. 垂直越权 1.4. 漏洞危害1.5. 修复建议 1.1. 漏洞原理 越权漏洞是指应用程序未对当前用户操作的身份权限进行严格校验&#xff0c;导致用户可以操作超出自己管理权限范…

网络安全笔记 -- 逻辑越权(水平垂直越权)

1. 逻辑越权 越权&#xff1a; 水平越权、垂直越权登录 暴力破解本地加密传输Cookie脆弱Session劫持密文对比认证 业务&#xff1a; 订单ID、手机号码、用户ID、商品ID等数据&#xff1a; 支付篡改、数量篡改、请求重放等找回&#xff1a; 客户端回显、Response状态值、Sessio…

渗透测试-越权漏洞之垂直越权和水平越权

越权漏洞之垂直越权和水平越权 文章目录 越权漏洞之垂直越权和水平越权前言一、什么是越权漏洞以及漏洞产生的原因1. 什么是越权漏洞2. 漏洞产生的原因 二、水平越权和垂直越权以及防御方法1.水平越权和垂直越权2.越权漏洞的防御方法 总结 前言 一、什么是越权漏洞以及漏洞产生…

【web安全】——逻辑漏洞之越权漏洞

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;一切为了她座右铭&#xff1a;不要让时代的悲哀成为你的悲哀专研方向&#xff1a;网络安全&#xff0c;数据结构 每日emo&#xff1a;希望我失望的日子过的快些 目录 一.越权漏洞简介 二…

怎样进行越权测试?

要了解越权测试&#xff0c;首先要先了解什么是越权攻击。越权攻击顾名思义就是超越了自己的权限范围&#xff0c;是指用户通过某种方式获取到了不属于自己的权限。越权攻击分为水平越权和垂直越权。下面我们先来说一下水平越权水平越权&#xff1a;攻击者尝试访问与他权限相同…

越权漏洞

什么是越权漏洞&#xff1f; 越权漏洞指的是应用在检查授权时存在纰漏&#xff0c;可以让攻击者获得低权限用户账户后&#xff0c;利用一些方式绕过权限检查&#xff0c;可以访问或者操作其他用户或者更高权限&#xff0c;而越权漏洞是属于业务性漏洞&#xff0c;困难在于这类…

水平越权与垂直越权

文章目录 越权漏洞简介水平越权概念常见场景实例 垂直越权概念常见场景实例 越权漏洞简介 越权&#xff0c;顾名思义&#xff0c;就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制&#xff0c;但是如果权限控制功能设计存在缺陷&#xff0c;那么攻击者就可以通过这…

水平越权垂直越权

#知识点&#xff1a; 1、水平越权-同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证&脆弱验证 4、脆弱验证-Cookie&Token&Jwt等 解释 水平越权 就是同级用户之间的越权&#xff0c;打个比方现在有ABC三个用户&#xff0c;A…

越权漏洞详解

文章目录 Over Permission越权风险问题概述漏洞产生条件常见越权漏洞水平越权&#xff08;平行越权&#xff09;概述pikachu靶场练习1 垂直越权概述pikachu靶场练习 修复建议练习 Over Permission 越权风险问题 越权访问&#xff08;Broken Access Control&#xff0c;简称BA…

逻辑越权总结(超详细总结涉及各类越权)

逻辑越权总结&#xff08;超详细总结涉及各类越权&#xff09; 1.逻辑越权1.1.漏洞原理1.2.漏洞原因1.3.水平越权1.3.1.原理1.3.2.漏洞出现位置1.3.3.危害1.3.4.案例1.3.4.1.登录账号1.3.4.2.获取信息1.3.4.3.修改信息 1.4.垂直越权1.4.1.原理1.4.2.漏洞出现位置1.4.3.条件1.4.…

浅谈越权

浅谈越权 越权&#xff08;或者说权限提升&#xff0c;Privilege Escalation&#xff09;是指攻击者能够执行其本身没有资格执行的一些操作&#xff0c;属于“访问控制”的问题。用大白话讲&#xff0c;越权就是“超越了本身拥有的权限&#xff0c;干了本来不可能干的事儿” 漏…

越权

越权介绍水平越权垂直越权寻找越权漏洞 一、越权介绍 越权&#xff0c;从字面意思理解就是用户可以操作超过自己管理权限范围的功能。 大多数web应用系统都具备权限划分和控制&#xff0c;但是如果权限校验存在问题&#xff0c;攻击者就可以通过这些问题来访问未经授权的功能或…