Hash函数加密算法(一)

2023-11-10

一、使用密码学的目的:

    保密性:防止用户的标识或数据被读取。 l

    身份验证:确保数据发自特定的一方。 

    数据完整性:防止数据被更改。

二、加密算法的分类:

   1、对称加密

       采用对称秘钥的加密系统加密、解密过程均采用同一把秘钥,通信双方必须同时获得这把钥匙进行加密解密操作。

       常见对称加密:DES\3DES\AES

   2、非对称加密

        非对称加密系统采用的加密解密秘钥是不同的,加密的称为公钥,解密的称为私钥。公钥加密私钥解密、私钥签名公钥验证

       常见的非对称算法:RSA\DSA\ECC

    3、哈希函数加密算法

        无需借助任何秘钥,主要用于针对前两者加密过程中需要保护的部分提供完整性、防伪造的支持。

       常见的哈希加密算法:MD5SHA-1SHA-2SHA-256SHA-X(系列)

 三、哈希算法

1、哈希

   将数据打乱混合,通过散列算法,重新创建一个叫做散列值的指纹,通常用一个短的随机字母和数字组成的字符串表示散列值。
2
、哈希算法的特性

   1)单向不可逆

    哈希(Hash)算法是一种单向密码体制,只有加密过程,没有解密过程

   2)可重复性

     相同输入经过同一哈希函数得到相同散列值,但并非散列值相同则输入结果相同。

     java中使用equals方法 java中的equalshashcode方法, java中用hashcode计算散列值,另外使用equals方法进行对比,返回true才能表示该对象为同一对象。

    	String result = new String();
    	String result2 = new String();
    	result="12121";
    	result2="121211";
        System.out.println(result.hashCode());
        System.out.println(result2.hashCode());
        
        String s="12121";
        String ss="12121";
        System.out.println(s.equals(ss));
        System.out.println(s.hashCode());
        System.out.println(ss.hashCode());
返回结果:

<span style="white-space:pre">	</span>46790767
<span style="white-space:pre">	</span>1450513826
<span style="white-space:pre">	</span>true
<span style="white-space:pre">	</span>46790767
<span style="white-space:pre">	</span>46790767
可见,针对同一类型对象,对象值相同,也就是散列函数的输入相同,输出的散列值也相同。对象的引用相同,但如果对象值不同,也就是指向不同的heap空间,计算出不同的散列值。

   3)抗冲突性

    不同的输入数据,经过同一散列函数,产生的散列值一定不相同。相同则产生哈希冲突(详见博主前面的博客更新)。

2、实现一个哈希算法

    哈希算法有多重实现思路和方式,例如加法哈希、位运算哈希、乘法除法哈希等。

    加法哈希是将每个输入循环叠加构成最后的哈希结果,prime 为任意质数

<span style="white-space:pre">	</span>static int additiveHash(String key, int prime)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">	</span>int hash, i;
<span style="white-space:pre">	</span>for (hash = key.length(), i = 0; i < key.length(); i++)
<span style="white-space:pre">	</span>hash += key.charAt(i);
<span style="white-space:pre">	</span>return (hash % prime);
<span style="white-space:pre">	</span>}
   位运算是采用移位、异或运算来充分混合输入元素

<span style="white-space:pre">	</span>static int rotatingHash(String key, int prime)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">	</span>int hash, i;
<span style="white-space:pre">	</span>for (hash=key.length(), i=0; i<key.length(); ++i)
<span style="white-space:pre">	</span>hash = (hash<<4)^(hash>>28)^key.charAt(i);
<span style="white-space:pre">	</span>return (hash % prime);
<span style="white-space:pre">	</span>}

四、哈希加密算法

1、哈希加密算法

     哈希算法应用于加密学,将加密学领域的哈希算法称为哈希加密算法,常见的如上面提到的MD5SHA-系列算法,每种哈希加密算法,均通过某种哈希函数进行迭代,将任意长度的消息输入,经过压缩生成“消息摘要”( MessageDigest)。

2、哈希加密算法的过程

   预处理(Preprocessing):消息填充、将消息分割成m个处理块、为哈希设置初始化值

   哈希计算(HashComputation):将预处理完成的数据生成消息摘要,利用对应的哈希函数、相关常熟生成哈希值(即散列值、摘要信息)。

   每种哈希加密算法根据初始化参数生成固定长度的摘要信息,例如SHA-256生成的摘要信息长度为128位。越长安全性越高。

3、应用:

    错误校正:在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验

    例如在邮件反欺诈技术中的DKIM,邮件 body信息使用simple/relaxed散列函数计算出bh值,同原数据一同发送。数据接收方使用同样的simple/relaxed散列函数再一次对接收到的数据进行散列计算,对比两次散列计算的结果是否一致。一致则保证邮件在传输过程中未被篡改,确保消息的完整性。


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

Hash函数加密算法(一) 的相关文章

  • error Command failed with exit code 1.

    从传统JQuery转变到Node js最烦的就是一接手新项目就得npm install 浪费大量时间不说还总会报莫明其妙的错误 这次又遇到了一个error Command failed with exit code 1 因为它的相关处报的问
  • 100+国产大模型排行榜!部分超越ChatGPT-4

    国产大模型的发展速度惊人 至少说明在国内的显卡数量是足够多的 如果能集中资源 或许能快速跟进ChatGPT 不过 其中不少厂家号称已经超越ChatGPT 4 让人感到欣慰 觉得哪个好 评论区见
  • 【金融】新成立基金建仓时点、行业分布与市场行情关系探究

    需要进一步交流 获取数据和代码的同学欢迎私信奥 基于新成立基金建仓带入市场的巨量资金会推动市场行情这一逻辑 开展了一系列研究 首先提出了通过基金净值识别建仓行为 累计绝对值涨跌幅法 和通过基金 值识别建仓行为 法 的两种方法 在通过回顾历史
  • 一键修改分辨率bat_设置分辨率的批处理

    if computername name1 SETRES h800 v600 b32 f85 if computername name2 SETRES h1024 v768 b32 f85 if computername name3 SET
  • libevent服务端,单线程应用

    libevent版本 libevent 2 1 12 stable include
  • 数据库MySQL与SQLite

    常用数据库及Qt中的用法 一 常用数据库 数据库管理系统 DBMS 是旨在使用 检索和定义规则以验证和操作数据库中的数据的软件 有四种DBMS类型 关系型 面向对象型 分层型和网络型 有很多开源数据库 包括MySQL SQLite等 SQL
  • Android13 Windows11-VMware-Ubuntu 源码下载和全编译

    Windows11 VMware Ubuntu Android13 源码下载和全编译 官方教程文档 想用 Mac 编译源码的朋友基本可以放弃想法了 我试过了各种兼容错误 不得已用了 Windows 装 VMware Ubuntu 一 硬件配
  • 知道这20个正则表达式,能让你少写1,000行代码

    正则表达式 一个十分古老而又强大的文本处理工具 仅仅用一段非常简短的表达式语句 便能够快速实现一个非常复杂的业务逻辑 熟练地掌握正则表达式的话 能够使你的开发效率得到极大的提升 正则表达式经常被用于字段或任意字符串的校验 如下面这段校验基本
  • python3 [爬虫入门实战]scrapy爬取盘多多五百万数据并存mongoDB

    总结 虽然是第二次爬取 但是多多少少还是遇到一些坑 总的结果还是好的 scrapy比多线程多进程强多了啊 中途没有一次被中断过 此版本是盘多多爬取数据的scrapy版本 涉及数据量较大 到现在已经是近500万的数据了 1 抓取的内容 主要爬
  • tensorrt的安装和使用

    安装 提前安装好 CUDA 和 CUDNN 登录 NVIDIA 官方网站下载和主机 CUDA 版本适配的 TensorRT 压缩包即可 以 CUDA 版本是 10 2 为例 选择适配 CUDA 10 2 的 tar 包 然后执行类似如下的命
  • rsync 远程同步

    Rsync 简介 rsync Remote Sync 远程同步 是一个开源的快速备份工具 可以在不同主机之间镜像同步整个目录树 支持增量备份 并保持链接和权限 且采用优化的同步算法 传输前执行压缩 因此非常适用于异地备份 镜像服务器等应用
  • auto 和 auto &是不一样的

    前言 什么时候用auto什么时候用auto 呢 先看代码testauto cpp include
  • unity 实现文本选中_Unity中如何读取TXT文本内容

    在游戏开发过程中 我们是离不开需求的 而需求的事情是由策划来做的 那么我们和策划也是需要沟通交流的 那么是怎么交流的呢 策划不需要写代码 只需要思考一些游戏的内容 数据 玩法的实现 然后让我们按照策划的东西来弄 所以和策划的沟通就是非常频繁
  • pgsql 自定义排序

    需求简述 用户要求查询数据表 使得输出结果指定中文字段chn name按照自定义的顺序 电 水 风 火等顺序排序 表内容 自定义排序sql 排序结果 工作中遇到的sql查询案例 如果有更简便的查询sql 欢迎多多交流
  • PlutoSDR学习指南【1】环境搭建+资料分享

    1 软件无线电及Pluto简介 软件无线电平台最通俗的语言来说 即通信系统中的功能采用软件实现 且可反复使用 比如简单的发射和接收信号 可以通过软件设置 信号的编码解码 可以通过软件设置 甚至你可以自己定义一种协议 用你自己的协议来实现一套
  • Python 已知 RSA 模数和指数,生成公钥进行加密

    在学习 js 加密的过程中 关于 RSA 加密知识有所接触 因此记录一下实际过程中遇到的问题 在这里我们主要讲解当没有公钥 已知公钥模数和指数的情况下 实现 RSA 加密 一 cryptography 包获取 RSA 公钥 首先需要安装 c
  • 【福利】Google Cloud Next ’23 精彩待发,Cloud Ace 作为联合赞助商提前发福利~

    Cloud Ace 是 Google Cloud 全球战略合作伙伴 在亚太地区 欧洲 南北美洲和非洲拥有二十多个办公室 Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位 并连续多次获得 Google Cloud 各类奖项
  • 【Neo4j与知识图谱】Neo4j的常用语法与一个简单知识图谱构建示例

    文章目录 一 Cypher基本语法 1 创建节点和关系 2 查询节点和关系 3 更新节点和关系 4 删除节点和关系 二 小示例 2 1 准备数据和创建实体和关系 2 2 进行查询修改等操作 一 Cypher基本语法 Neo4j是一种基于图形
  • 江西理工大学 微型计算机原理,江西理工大学-微机原理考试(wenwei)作业.docx

    江西理工大学 微机原理考试 wenwei 作业 第一章1 在计算机内部为什么要采用二进制数而不采用十进制数 2 设机器字长为6位 写出下列各数原码 补码和移码 10101 11111 10000 10101 11111 10000 3 利用
  • keepalived 源码编译安装

    1 官方下载源码包 root zk01 wget https www keepalived org software keepalived 2 0 20 tar gz 2 解压 root zk01 tar zxvf keepalived 2

随机推荐

  • 漫谈硬编码

    一 什么是硬编码 在计算机程序或文本编辑中 硬编码是指将可变变量用一个固定值来代替的方法 例如 以C 为例 char szText 100 code for int i 0 i lt 100 i code 上述语句使用固定值100限定了循环
  • 多维时序

    多维时序 MATLAB实现Attention GRU多变量时间序列预测 注意力机制融合门控循环单元 即TPA GRU 时间注意力机制结合门控循环单元 目录 多维时序 MATLAB实现Attention GRU多变量时间序列预测 注意力机制融
  • 容器安全加固

    Docker容器的安全性 很大程度上依赖于Linux系统自身 评估Docker的安全性时 主要考虑以下几个方面 Linux内核的命名空间机制提供的容器隔离安全 Linux控制组机制对容器资源的控制能力安全 Linux内核的能力机制所带来的操
  • 你知道怎样做好一个老板吗?先来看看不适合做老板的三种人

    穷人和富人最大的差别就是思维方式的不同 就如之前一直听的一个故事 有个穷人吃不饱穿不暖 就去上帝跟前哀求说 这个世界太不公平了 为什么富人天天悠闲自在 而穷人就要天天吃苦受累 上帝微笑着说 那你觉得怎么样才是公平 穷人说到 要是富人和我一样
  • Ubuntu16.04 安装 显卡驱动 + CUDA + cuDNN + Tensorflow-gpu + Keras + PyCharm

    在Ubuntu16 04上安装 显卡驱动 CUDA cuDNN Tensorflow gpu Keras PyCharm 目的是为了深度学习所用 博主参考了众多资料 最终成功将所有软件安装完毕 且能成功运行使用 因而写下该篇安装教程 供借鉴
  • CPU亲和度

    CPU亲和度 CPU Affinity 就是将一个进程或者线程强制绑定在CPU的某一个core上运行 参考 https www cnblogs com zhangxuan p 6427533 html https www cnblogs c
  • Java_Linux基础:8. 编辑器-vim

    目录 1 vi简介 2 命令行模式 3 文本输入模式 4 末行模式 5 vim基础操作 5 1 进入插入模式 5 2 进入命令模式 6 vim分屏操作 6 1 分屏操作 6 2 启动分屏 6 3 关闭分屏 6 4 编辑中分屏 6 5 分屏编
  • os模块关于路径

    os模块关于路径的几个主要方法 os path 模块路径访问函数 os path basename 去掉目录路径 返回文件名 os path dirname 去掉文件名 返回目录路径 os path split 将路径分为 dirname
  • telnet 访问80端口

    目的 虚拟机上ubuntu telnet 远程访问谷歌80端口 网络设置 宿主机XP 虚拟机 ubuntu 网络连接模式 NAT 操作步骤 1 参考http blog csdn net mifan88 article details 735
  • vscode中误删代码文件恢复

    误删了项目某个文件夹 但是Ctrl z又没回来 就很无语 一般在vscode的这个页面会有你删掉的文件 查看你删掉的文件夹路径 然后git checkout就可以了 git checkout a66e87460a2ea04753dd7f39
  • 微服务六种设计模式

    1 聚合设计模式 聚合设计模式常用于报表服务 在微服务系统中报表服务是肯定存在的 2 代理设计模式 在微服务架构中 代理服务 是必然存在的 常用的代理服务是 网关服务 微服务的各个服务是没有状态的 需要通过统一的入口 代理服务 经过权限的校
  • 计算机数制详解及相互转换(二进制、八进制、十进制、十六进制)

    计算机数制详解及相互转换 二进制 八进制 十进制 十六进制 前言 一 计算机中常用的数制 1 二进制 2 八进制 3 十进制 4 十六进制 二 数制转换 1 十进制转二进制 2 二进制转十进制 3 二进制转八进制 4 二进制转十六进制 5
  • C++关于引用的分析

    目录 1 引用的概念 2 引用的特点 1 引用在定义时 必须初始化 2 一个变量可以有多个引用 3 引用一旦引用了一个实体 再不能引用其他实体 3 引用的应用 3 1 做参数 3 2做返回值 3 2 1 函数栈帧及临时变量 3 2 2 引用
  • mysql的事务是什么 mybatis框架中的事务配置 mybatis中的自动提交事务和手动提交事务 深入理解mybatis事务源码 通过对象的地址来理解mysbaits中的会话 对象的首地址

    目录 什么是事务 百度百科的解释 维基百科的解释 逻辑单元 事务的四大特征 操作事务的演示 在当前事务添加数据后查询 事务回滚 rollback 提交事务 commit mybatis中的事务 配置数据库的db properties 配置c
  • xargs -i参数详解

    学习所需 文章转载过来 xargs与find经常结合来进行文件操作 平时删日志的时候只是习惯的去删除 比如 find type f name log xargs rm rf 就将以log结尾的文件删除了 如果我想去移动或者复制就需要使用参数
  • vue3.0全局和按需引入element-plus

    1 先来看一下未添加element plus的干净项目打包后文件大小 2 全局安装element plus npm install element plus save 在main js里写 import createApp from vue
  • nginx 重启/停止/退出失败

    启动Nginx时候报错 nginx error open usr local nginx logs nginx pid failed 2 No such file or directory 这句话的意思就是 你的nginx pid 打开失败
  • linux tcp优雅关闭,优雅地关闭Socket;检测非正常断开的TCP连接

    转载声明 本文所有版权归原作者所有 如本文原作者不认可转载 请联系本空间删除 相关资源 NA 如何优雅地
  • 集群搭建--安装apache-hive-2.3.4

    本文安装的是 apache hive 2 3 4 bin tar gz 其下载地址为 路径 https pan baidu com s 1ZPJxbGdpjW0fPpKUa7RX6Q 提取码 i58e 解压 apache hive 2 3
  • Hash函数加密算法(一)

    一 使用密码学的目的 保密性 防止用户的标识或数据被读取 l 身份验证 确保数据发自特定的一方 数据完整性 防止数据被更改 二 加密算法的分类 1 对称加密 采用对称秘钥的加密系统加密 解密过程均采用同一把秘钥 通信双方必须同时获得这把钥匙