One-way hash function

本文介绍了单向散列函数的基本原理,包括其不可逆性、计算速度和在密码学中的应用,如密码存储和接口验签。通过实例展示了MD5、SHA-256和SHA-1等哈希算法的实现方式。同时提到了比特币协议中使用的SHA-256和RipeMD160组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function规则

通过输入很容易计算输出,但是,通过输出反推输入,只能暴力穷举。因为欧拉定理只给出正向推导公式,没有给出反向推导公式。

  1. Hash value,即散列值的长度固定
  2. 摘要,即消息不同Hash value 不同
  3. 单向性,不可逆
  4. 计算速度快

应用场景

One-way hash function 是一种保证信息完整性的密码技术。比如存储用户的密码时,只需要存储密码的Hash value即可,验证时,只需要对比两个Hash value就可以判断输入的密码是否正确。

  1. 加密和解密,密码
  2. 接口验签,接收到的内容进行Hash value,与接收到的Hash value 进行对比,就是验签的过程。
  3. 完整性校验
  4. 云盘秒传,Upload时,根据文件信息生产Hash value,如果与服务器上的某个Hash value相等,说明已存在该文件,直接通过Hash value 关联即可。

例如:MySQL社区给出安装文件的哈希值,以便让用户下载后验证文件是否被篡改。
在这里插入图片描述

实现方式

Hash value(散列值 消息摘要 message digest, 指纹fingerprint),相当于消息的身份
One-way hash function(message digest function 消息摘要函数,哈希函数,杂凑函数)
source message(pre-image)
在这里插入图片描述

		String book = "It's a book";
		System.out.println(book.hashCode());
		System.out.println(Integer.toHexString(book.hashCode()));
		
		MessageDigest md = MessageDigest.getInstance("MD5");
		md.update(book.getBytes());
		System.out.println(new BigInteger(1, md.digest()).toString(16));
		
		# -1420758063
		#  ab50f3d1
		#  "It's a book"  =  505fe447e3d0257ff64fbd321849928f    16个字节 / 32个字符
		#  "It's a book1" =  fd88076e4a8161b76efd6d518bc2c1ce    16个字节 / 32个字符

其它编码和加密方式:

MessageDigest.getInstance("SHA-512")  	64个字节/128个字符	
#d0988c57f40e049be1aa371e1c9b58ae1bfe1028df925e6429689aff746a69e8
d9d447773d656a1df097b3def2fe36e36cf7b54a4679f486d84b0d4e675a3456

MessageDigest.getInstance("SHA-256")    32个字节/64个字符
#aa6a7c05f39dcde57599f76c92e2295d86726e4d875e426bbe388941942ffa38

MessageDigest.getInstance("SHA-1") 		20个字节/40个字符

从Java9开始支持SHA-3
在这里插入图片描述

哈希算法

比特币协议使用的是SHA-256和RipeMD160,其中SHA-256也叫hash256和dhash,RipeMD160是在SHA-256的运算结果上再计算RipeMD160,也叫hash160。
在这里插入图片描述
在这里插入图片描述

参考文献1


  1. 单向散列加密 https://blog.51cto.com/gozhuyinglong/4058818 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值