【哈希加密算法】MD5和SHA-1基本介绍和使用!

news2024/9/23 23:32:45

一、哈希算法

 哈希算法,根据碰撞概率,输出的长度越长,就越难产生碰撞,也就越安全。

常用的哈希算法如下: 

(1)哈希算法的用途

  1. 数据加密:哈希算法可以将原始数据转换成不可逆的加密字符串,这个字符串被称为哈希值。哈希值可以用于保护数据的隐私,因为无法通过哈希值推导出原始数据。

  2. 密码存储:哈希算法可以用于保护密码的存储。通过将密码转换为哈希值并存储哈希值,可以防止攻击者获取用户密码。当用户登录时,输入的密码将与保存的哈希值进行比对,如果匹配则允许用户登录。

  3. 校验文件的下载。

总之,哈希算法在数据安全、数字证书、数字签名等领域都有广泛的应用。

一、MD5

MD5是一种计算机算法,用于将任意长度的数据(消息)压缩成一个128位(16字节)的哈希值。MD5算法常用于数据完整性校验、数字签名、密码存储等领域。

MD5算法具有以下特点:

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 唯一性:不同的输入数据会产生不同的输出。
  3. 不可逆性:无法通过MD5值反推出原始数据。
  4. 抗修改性:对数据进行微小的修改,MD5值的变化也会很大。

(1)对字符串进行编码

public class Demo01 {
	public static void main(String[] args) throws NoSuchAlgorithmException {
		//创建基于MD5算法的消息摘要对象
		MessageDigest md5=MessageDigest.getInstance("MD5");
		
		//更新原始数据
		md5.update("博得明月出,用兰花换锦服".getBytes());
		
		//获取加密后的结果
		byte[] digestBytes=md5.digest();
		System.out.println("加密后的结果(字节数组):"+Arrays.toString(digestBytes));
		System.out.println("加密后的结果(16进制字符串):"+HashTools.bytesToHex(digestBytes));
		System.out.println("加密结果的长度:"+digestBytes.length);
	}
}

 加密后的结果(字节数组):[-78, 36, -54, 29, 82, 49, -85, -24, 87, -39, 102, 14, -4, 73, -83, -32]
加密后的结果(16进制字符串):b224ca1d5231abe857d9660efc49ade0
加密结果的长度:16

(2)对图片进行加密 

//按照MD5算法对图片进行加密
public class Demo03 {
	public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
		//图片的原始字节内容
		byte[] imageBuf=Files.readAllBytes(Paths.get("D:\\test\\20230521\\mao1.jpg"));
		
		//创建基于算法的消息摘要对象
		MessageDigest md5=MessageDigest.getInstance("MD5");
		
		//原始字节内容
		md5.update(imageBuf);
		
		//获取加密摘要
		byte[] digestBytes=md5.digest();
		System.out.println("加密后的结果(字节数组):"+Arrays.toString(digestBytes));
		System.out.println("加密后的结果(16进制字符串):"+HashTools.bytesToHex(digestBytes));
		System.out.println("加密结果的长度:"+digestBytes.length);  //MD5算法的固定输出长度为16个字节	
	}

}

加密后的结果(字节数组):[-90, 35, 17, 98, 5, 9, -60, 116, -53, -119, -32, -68, 43, -65, 66, 105]
加密后的结果(16进制字符串):a62311620509c474cb89e0bc2bbf4269
加密结果的长度:16

三、SHA-1

SHA-1是一种加密算法,全称为Secure Hash Algorithm 1。它旨在产生一个160位(20字节)的消息摘要,以提供数据的完整性保护。

public class Demo04 {
	public static void main(String[] args) throws NoSuchAlgorithmException {
		//原始密码
		String password="xdsqczkyqs";
		
		//产生随机的盐值
		String salt=UUID.randomUUID().toString().substring(0,4);
		
		//创建基于SHA-1算法的消息摘要对象
		MessageDigest sha1=MessageDigest.getInstance("SHA-1");
		sha1.update(password.getBytes());
		sha1.update(salt.getBytes());
		
		
		//计算加密结果SHA-1的输出结果为20个字节(40)
		String digestHex=HashTools.bytesToHex(sha1.digest());
		System.out.println("加密结果:"+digestHex);
	}

}

 加密结果:d98902bdfdf050316c28487caf5b358377a4cb23

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)

在公司网络中安装 python 包时最常见的问题是 SSL 证书验证失败。有时公司会屏蔽网络中的某些网站,因此员工无法访问这些网站。每当他们尝试访问这些网站时,都会显示“由于公司政策,访问被拒绝”。它会导致到达主要 python 网站时出现连接错误…

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 可以是暴…

数据结构与算法(C语言版)P1---算法效率

算法的效率:算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢?比如斐波那契数列: long long Fib(…

面试官:我们深入聊聊Java虚拟机吧

哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

2023年CRM系统成功落地的5个标准

企业做CRM选型时都在思考投入产出比,花费上万元、甚至几十万元和几个月的时间购买和实施CRM,能否为公司带来降本增效的变革?CRM上线后,需要多长时间才能真切地看到效果?评估CRM的使用效果,需要每个企业制定…

【C++STL基础入门】queue基础使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么二、queue的基础使用2.1 queue的构造函数2.2 queue的属性函数 总结 前言 C标准模板库(STL)提供了一系列强大的容器和算法…

vi/vim编辑器

vi和vim区别 vi 和 vim 是常见的文本编辑器,以下是它们之间的区别: 功能和特性: vi 是最早的版本,是在早期Unix系统中广泛使用的编辑器。vi 相对较简单,功能主要集中在基本的文本编辑操作上,如插入、删除、…

MyBatis: 配置文件解析流程

XmlConfigurationBuilder类来解析配置文件。 调用了build方法,其代码如下: 其中通过parse方法返回一个Configuration对象,在传递给build方法。 parse方法代码如下: 其中调用了parseConfiguration方法, 可以看到其中…

hive 静态分区与动态分区(笔记)

目录 前言: 静态分区: 1.创建分区 2.删除分区 3.在分区中插入数据 4.查看分区表数据 动态分区 : 2.查看v表源数据 3.以emp_name为动态字段数据抽取到employee表 总结 前言: Hive中的分区就是把一张大表的数据按照业务需要…

华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装

文章目录 华为云云耀云服务器L实例评测|华为云上试用监控服务Prometheus一、监控服务Prometheus三件套介绍二、华为云主机准备三、Prometheus安装四、Grafana安装五、alertmanager安装六、三个服务的启停管理1. Prometheus、Alertmanager 和 Grafana 启动顺序2. 使用…

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__bizMzg2NDY3NjY5NA&mid2247490070&idx1&snebdc608acd419bb3e71ca46acee04890&chksmce64e42ff9136d39743d16059e2c9509cc799a7b15e8f4d4f71caa25968554…

UG时的弹出框:提示没有可用许可证,No such feature exists(-5),

当过多用户使用UG时或UG优化失效时会出现此弹出框。如果该问题发生时,需立即联系管理员,查看许可管理平台,该服务器许可是否占满,如果占满,联系武汉格发管理员,请准备好服务器远程,可以及时查看…

NLP(5)--自编码器

目录 一、自编码器 1、自编码器概述 2、降噪自编码器 二、特征分离 三、自编码器的其他应用 1、文本生成 2、图像压缩 3、异常检测 四、VAE 1、极大似然估计 2、GSM 3、GMM 4、VAE的引出 5、VAE 一、自编码器 1、自编码器概述 自编码器(Auto-Encode…

【高阶数据结构】AVL树(C++实现)

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C进阶 ⭐代码仓库:C进阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

ODrive移植keil(三)—— USB虚拟串口和快速正弦余弦运算

目录 一、USB虚拟串口1.1、硬件连接1.2、代码移植1.3、测试1.4、最终代码 二、快速正弦余弦运算2.1、硬件连接2.2、代码移植2.3、测试2.4、结论 三、软件中断3.1、配置中断3.2、官方代码的使用方式 ODrive、VESC和SimpleFOC 教程链接汇总:请点击 一、USB虚拟串口 单…

Pdf文件签名检查

如何检查pdf的签名 首先这里有一个已经签名的pdf文件&#xff0c;通过pdf软件可以看到文件的数字签名。 下面就是如何代码检查这里pdf文件的签名 1.引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId&g…

彩色相机工作原理——bayer格式理解

早期&#xff0c;图像传感器只能记录光的强弱&#xff0c;无法记录光的颜色&#xff0c;所以只能拍摄黑白照片。 1974年,拜尔提出了bayer阵列&#xff0c;发明了bayer格式图片。不同于高成本的三个图像传感器方案&#xff0c;拜尔提出只用一个图像传感器&#xff0c;在其前面放…

【进阶C语言】数据在内存中的存储

一、数据类型的介绍 1.整形家族 &#xff08;1&#xff09;char--字符型 单位&#xff1a;一个字节&#xff0c;包括unsigned char和signed char (2)short--短整形 单位&#xff1a;两个字节&#xff0c;包括unsigned short[int]和signed short[int] (3)int--整形 单位&…

水果店如何通过小程序商城完成配送路径

水果店线上发展的主要目标就是销售卖货&#xff0c;随着电商经济发展&#xff0c;传统线下店面临不少困境&#xff0c;线上部分商家会选择进驻到电商平台及外卖平台&#xff0c;但收获流量的同时也有高昂的流量费、抽成等成本的支出&#xff0c;难以外部宣传及内部打通流程、较…