Hash算法的特征和功能

Hash(哈希)是通过一种算法将任意长度的数据(例如消息、文件等)转换为固定长度的字符串或数字的过程。哈希算法具有以下几个特点:

主要特征:

        1.固定长度输出

                无论输入数据的大小或长度如何,哈希值(也称为哈希码、摘要)都将具有固定的长度。例如,SHA-256 哈希算法总是生成 256 位(32 字节)的哈希值。

        2.不可逆性

                 

                   哈希函数从原始数据生成哈希值,但不能从哈希值反推回原始数据。这意味着哈希过程是单向的。

        3.敏感性

                    小的输入变化(如更改一个字母)会导致输出哈希值发生巨大改变。这种特性称为“雪崩效应”,如图:

        4,抗碰撞性:

                      在理想状态下,m!=n时,H(m)!=H(n),如果两个不同的输入生成相同的哈希值,这种情况称为“碰撞”。

常用算法:

  • MD5(Message-Digest Algorithm 5):广泛使用,但存在安全漏洞,如碰撞攻击。现不再推荐用于安全目的。
  • SHA-1(Secure Hash Algorithm 1):较早的哈希算法,现已发现多个安全漏洞。也不推荐用于安全目的。
  • SHA-256 和 SHA-3:当前较为安全的哈希算法,广泛用于安全和加密应用。

Hash算法在生活中的实际应用:

  1. 数据完整性验证:       
    1. 在文件传输中,哈希值可以用来检查数据是否被意外修改,例如文件下载时常看到的验和。
  2. 密码存储
    1. 在存储用户密码时,通常会存储密码的哈希值,而不是明文密码,这样可以防止数据泄露时直接暴露用户的密码。
  3. 数字签名
    1. 在数字签名中,通常会先对消息进行哈希处理,并将哈希值与签名一起发送,验证者使用同样的哈希算法对收到的消息进行哈希,并与签名中的哈希值进行比对。
  4. 区块链
    1. 在区块链技术中,哈希算法用于确保数据的完整性和安全性。区块中的信息和前一个区块的哈希值结合在一起,形成不可篡改的链。
    2. 例如:BTC(比特币)

python有一个Hash算法库——Hashlib

Hashlib是内部库,所以不需要用pip导入

import hashlib

下面是将一串文字转换成的代码

import hashlib  

# 输入需要哈希的消息  
message = input("请输入您想要哈希的文本:")  

# 创建 hashlib 对象,使用 SHA-256 算法  
hash_object = hashlib.sha256()  

# 更新哈希对象,输入的数据需要是字节类型  
hash_object.update(message.encode('utf-8'))  

# 获取最终哈希值  
hash_value = hash_object.hexdigest()  # 以十六进制字符串形式返回哈希值  

print(f"SHA-256 哈希值: {hash_value}")

# 使用 MD5  
hash_object_md5 = hashlib.md5()  
hash_object_md5.update(message.encode('utf-8'))  
md5_hash_value = hash_object_md5.hexdigest()  
print(f"MD5 哈希值: {md5_hash_value}")  

# 使用 SHA-1  
hash_object_sha1 = hashlib.sha1()  
hash_object_sha1.update(message.encode('utf-8'))  
sha1_hash_value = hash_object_sha1.hexdigest()  
print(f"SHA-1 哈希值: {sha1_hash_value}")

代码解读

  1. 导入 hashlib 模块:首先,导入 Python 的 hashlib 模块,它提供了使用多种哈希算法的功能。

  2. 输入数据:用户可以输入想要进行哈希处理的文本信息。

  3. 创建哈希对象:使用 hashlib.sha256() 创建一个 SHA-256 哈希对象。您也可以根据需要使用其他算法,例如 hashlib.md5() 或 hashlib.sha1()

  4. 更新哈希对象:使用 update() 方法将输入数据传递给哈希对象,记得输入的数据必须是字节类型,因此需要使用 encode('utf-8') 将字符串转换为字节。

  5. 获取哈希值:使用 hexdigest() 方法获取计算出的哈希值,并以十六进制字符串形式返回。

密码加密:

        一个正常的代码判断密码是否正确:

key=input("请输入密码:")
if key=="123456":
    print("登录成功")
else:
    print("登录失败")

在代码串里就能看到密码是123456,就算你把它打包成exe,exe文件可以被反编译

        用字符Hash值判断密码是否正确:

import hashlib
message=input("请输入密码")

hash_object = hashlib.sha256()
hash_object.update(message.encode('utf-8'))
hash_value = hash_object.hexdigest()  # 以十六进制字符串形式返回哈希值

hash_object_md5 = hashlib.md5()
hash_object_md5.update(message.encode('utf-8'))
md5_hash_value = hash_object_md5.hexdigest()

hash_object_sha1 = hashlib.sha1()
hash_object_sha1.update(message.encode('utf-8'))
sha1_hash_value = hash_object_sha1.hexdigest()

if hash_value == "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92" and md5_hash_value=="e10adc3949ba59abbe56e057f20f883e" and sha1_hash_value == "7c4a8d09ca3762af61e59520943dc26494f8941b":
    print("登录成功")
else:
    print("登录失败")

根据Hashs算法不可逆性敏感性,可以用多种算法来保证密码不会有碰撞,就变成了最好的保护方式,就算是黑客,破解也难如登天

还有想了解的,发在评论区哦!作者会在24小时回复的(*^▽^*)

点个赞再走吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值