哈希及其应用(字典,加密等)

2023-11-12

一、名词说明

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

哈希:指压缩映射的转换过程。

哈希函数:实现散列算法的函数,即实现映射转换的函数。

哈希表:存放记录的数组,即存放散列值的数组。

 

二、哈希函数特点

本篇不介绍哈希函数的具体实现,只讲解其原理和应用。

哈希函数的主要特点:

1、哈希函数的输入(message)可以是任何数字化的东西,包括图像和音乐,输入(digest)是一系列固定的数值。

2、单向性:给定d,很难找到M使得H(M)= d。

3、映射分布均匀性:哈希的输出结果中, 0和1 的 bit 比特总数大致相等, 输入变化一个比特,输出有一半以上的结果会变化。

4、碰撞抵抗:给定M,很难找到M',满足H(M)=H(M');

 

三、哈希函数的应用

特点决定其功能应用。

1、压缩函数MD5,SHA-1等都是常用的哈希函数

2、公钥密码学的明文预处理(例如,OAEP)

3、消息认证

4、哈希树(用于数字签名和时间戳)

5、通用密钥加密

6、实现数据结构 - 字典

 

四、哈希的思想与设计 - 字典为例

字典结构的三个基本操作(添加元素,获取元素和删除元素)的平均时间复杂度为O(1)。

不同编程语言对字典的实现:python的dict、java的dictionary、c#的Dictionary、lua的table等。

具体设计方法:

1、选定一个整数的下标范围(如0-N)的顺序表

2、选定一个从实际关键码集合到上述下标范围的适当映射h:

    在需要存入关键码数据为key的数据时,将其存入表中第h(key)个位置;

    遇到以key为关键码的检索时,直接去找表中第h(key)个位置的元素。

哈希函数就是一个映射,只要使得任何关键字由此所得的哈希函数值都落在表长允许的范围之内即可。本质上看哈希函数不可能做成一个一对一的映射关系,其本质是一个多对一的映射,对于k1≠k2,存在h(k1) = h(k2),即哈希碰撞是不可避免的。

所以一般采用如下方法,将哈希表设计为二维结构。

如上图所示,左侧部分是一个一维顺序存储的数组,数组单元格里的内容是指向另一个链式数组的指针。图中绿色部分是<Key,Value>,绿色部分右侧的白色部分是指向下一对键值对的指针。

hash表的工作原理:
(1).第一步 先根据给定的key和散列算法得到具体的散列值,也就是对应的数组下标。
(2).第二步,根据数组下标得到此下标里存储的指针,若指针为空,则不存在这样的键值对,否则根据此指针得到此链式数组。(此链式数组里存放的均为一对对<Key,Value>)。
(3).遍历此链式数组,分别取出Key与给定的Key比较,若找到与给定key相等的Key,即在此hash表中存在此要查找的<Key,Value>键值对,此后便可以对此键值对进行相关操作;若找不到,即为不存在此 键值对。

所以hash表其实就是管理一对对<Key,Value>这样的结构,此链式数组用于处理哈希冲突的情况。

参考:

https://www.jianshu.com/p/4a0f0dfc443d

百度百科

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希及其应用(字典,加密等) 的相关文章

  • 刷脸支付服务商需要敏锐把握快速行动

    科技改动生活 靠脸吃饭已不是笑言 无论是饭店吃饭还是医院看病又或者搭乘公交 地铁等日常生活行为 很多场景曾经能够完成刷脸完成买卖支付环节 继手机扫码支付后 刷脸支付再次成为关注焦点 移动支付方兴未艾 刷脸支付忽然兴起 微信的这一举措 是刷脸
  • 【Antlr】修改由Antlr生成的表示式?替换遍历方式?

    1 概述 我想使用Antlr4读取表示式并且其進行一些修改 例如 如果语法是算术运算 我將修改表示式 表示 2 3 1 與 2 4 然後用 8 這是 計算 或 簡化 要執行此操作 我將建立一些樹結構 第一個想法是使用由Antlr建立的相同的
  • [网站搭建] 阿里云搭建个人网站及域名绑定

    前一篇 网站搭建 阿里云虚拟主机搭建及FTP文件上传 主要讲述了如何通过阿里云虚拟机搭建网站服务器 同时FTP上传文件 登录后进入控制台或管理界面 接下来的主要步骤如下图所示 1 获取追加信息 2 网站备案 3 上传网站数据库数据 4 网站

随机推荐

  • CSR867x — 广播数据设置接口以及如何添加厂商数据

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的话 作者水平有
  • Visdom:Python可视化神器

    Visdom 可视化神器 项目地址 visdom 文章目录 Visdom 可视化神器 visdom实质 visdom核心概念 env 环境 pane 窗格 创建Visdom环境 常用API plot scatter plot line pl
  • 重新学javaweb---过滤器 应用--全站乱码

    之前没用过滤器的时候我们解决乱码 的办法是在每个servlet最前面加 响应乱码 response setCharacterEncoding utf 8 通知服务器 response setContentType text html cha
  • 解决VMware虚拟机Ubuntu 18.04无法上网问题!

    由于应用需要 安装了Ubuntu18 04 整体效果还不错 唯一的BUG就是网络不稳定 很容易断网 常常出现 connected failed 解决办法 1 sudo service network manager stop 2 删除之前先
  • Epoll实验总结

    Epoll实验总结 2012 09 06 15 54 10 分类 network program 标签 epoll c 举报 字号 订阅 下载LOFTER 我的照片书 一 超时实验 建立一个阻塞模式的tcp连接到一个没有监听的服务端口 肯定
  • 【vue3】vue3在父组件中调用子组件中定义的methods

    首先要区分子组件的setup的写法 写法1 子组件的setup写在
  • 声音的基础知识

    一 声音的定义 声音 sound 是由物体振动产生的声波 是通过介质 空气或固体 液体 传播并能被人或动物听觉器官所感知的波动现象 最初发出振动 震动 的物体叫声源 声音以波的形式振动 震动 传播 声音是声波通过任何介质传播形成的运动 声音
  • 【mmsegmentation模型训练deeplabv3】自定义数据集加载和训练

    目录 前言 mmsegmentation下载 mmsegmentation官网 欢迎来到 MMSegmentation 的文档 MMSegmentation 0 27 0 文档https mmsegmentation readthedocs
  • Mac os使用git,不依赖Xcode

    说明 后来发现使用mac的命令行开发者工具很香 于是又删除了下文安装的git 直接点击下图的 安装 来获取命令行开发者工具 安装路径是 Library Developer CommandLineTools 包含了git gcc g make
  • import com.google.common.* 出错,找不到

    一 问题 在启动项目的时候 import com google common base Preconditions 报错 找不到这个类 二 解决 要引入guavar依赖 Guava 中文是石榴的意思 该项目是 Google 的一个开源项目
  • JavaWeb 相关问题汇总:

    我是目录 1 输入 URL 后发生了什么事情 如何定位服务资源 2 如何接收 HTTP 请求数据 3 ajax有什么作用 4 Filter 过滤器 5 tomcat 1 输入 URL 后发生了什么事情 如何定位服务资源 通过IP找到主机 通
  • 华为OD2023(A卷)基础题27【找数字、找等值元素】

    华为OD机试 找数字 找等值元素 找数字 给一个二维数组nums 对于每一个元素num i 找出距离最近的且值相等的元素 输出横纵坐标差值的绝对值之和 如果没有等值元素 则输出 1 输入描述 输入第一行为二维数组的行 输入第二行为二维数组的
  • java通过经纬度获取区间

    引入依赖
  • python语言程序设计实践教程答案上海交通大学陈东_《C语言程序设计》蔺德军 主著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者 蔺德军 主著 出版社 辽宁大学出版社 出版时间 2015 11 01 ISBN 9787121274220 版权提供 辽宁大学出版社 基本信息 书名 C语言程序设计上机实验与习题解答 定价 29 00元 售价 18 6元 便
  • 卡内基梅隆大学(CMU),那些经受住时间考验的机器学习论文–第二弹:动态主题模型

    这次 我们要解释一种典型的机器学习算法 动态主题模型 Dynamic Topic Model 概率主题模型和概率图模型是每个做文本挖掘的学者的必学课题 其中最常见的主题模型是隐含狄利克雷分布 LDA 当然 本文的动态主题模型也是主题模型的一
  • Mysql group by 与order by 一起使用

    项目中遇到这样的要求 从数据表里查出每台机器的最后一次链接时间 必须group by机器id order by connect time SELECT c d equipment type FROM ms gateway connect c
  • C++中float和double的比较

    在c 开发中 double或者float类型判断相等性不能简单的用等于符号 进行 一般会采用如下方式进行判断 static inline bool DoubleEqual double a double b return fabs a b
  • Log4j学习笔记

    Log4j学习笔记 1 入门实例 2 Log4j基本使用方法 2 1 定义配置文件 2 2 在代码中使用Log4j 2 3 日志级别 本文参考https blog csdn net u013870094 article details 79
  • 实战--Kafka学习(二)

    问题导读1 Kafka工作包含哪些流程 2 为防止log文件过大导致数据定位效率低下 kafka引入了什么 3 Kafka生产者分区的原因和原则是什么 4 Kafka数据可靠性是如何保证的 3 1 Kafka工作流程及文件存储机制Kafka
  • 哈希及其应用(字典,加密等)

    一 名词说明 Hash 一般翻译做散列 杂凑 或音译为哈希 是把任意长度的输入 又叫做预映射pre image 通过散列算法变换成固定长度的输出 该输出就是散列值 这种转换是一种压缩映射 也就是 散列值的空间通常远小于输入的空间 不同的输入