python通过hashlib使用如md5,sha1等哈希算法

哈希

哈希,也即Hash,是一种将任意长度的数据输入映射为固定长度输出的数据处理方式。输出的固定长度数据叫做哈希值。哈希非常重要,常常用于数据加密,校验,数据结构等。

哈希通常有以下特征:

  • 相同的输入总是会产生相同的输出
  • 无论输入数据的长度有多长,哈希值的长度是固定的
  • 通过哈希值很难推算出原始数据
  • 即使输入数据有微小变化,哈希值也会发生巨大的变化

在python中,可以通过hashlib进行哈希的操作。hashlib是python自带的,因此无需额外安装。

hashlib

基本方法

hashlib.new(name):创建指定算法的哈希对象。

hashlib.md5():创建md5哈希对象。

hashlib.sha256():创建sha256哈希对象。

hash.update(data):将数据传入哈希对象。

hash.hexdigest():返回十六进制格式的哈希值。

hash.digest():返回二进制格式的哈希值。

md5

import hashlib

md5 = hashlib.md5()
md5.update(b"sagegrass")
print(md5.hexdigest())

sha256

import hashlib

sha256 = hashlib.sha256()
sha256.update(b"sagegrass")
print(sha256.hexdigest())

常见应用

文件校验

通过校验文件的哈希值,可以判断其是否被篡改(也常用于网盘中,只存储一份源文件)。

import hashlib

def calculate_file_hash(file_path, algorithm="sha256"):
    hash_func = hashlib.new(algorithm)
    with open(file_path, "rb") as f:
        while chunk := f.read(4096):
            hash_func.update(chunk)
    return hash_func.hexdigest()


file_hash = calculate_file_hash("filename.txt")
print(file_hash)

密码存储

密码存储如果存储明文密码,是有泄露风险的,因此,通常考虑先进行哈希加密,避免存储明文密码。

import hashlib

def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

password = "sagegrass_password"
hashed_password = hash_password(password)
print(hashed_password)

可选哈希方法

哈希算法名特点
md5速度快,但已被证明不安全,易受碰撞攻击,应当仅用于非安全性要求的场景
sha1比md5略微安全,但同样存在安全漏洞,不建议使用
sha224224位的哈希值,较为少见
sha256安全性较高,因此广泛应用于安全领域
sha384384位的哈希值,较为少见
sha512512位的哈希值,长度较长
sha3系列(224,256,384,512)3系列提供与2系列相同长度的哈希值,但是安全性更高,不过使用并没有那么广泛

 当然,可选方法仍然不只有这些,更多方法可以通过代码查看

import hashlib

print(hashlib.algorithms_available)

注意:虽然在过去,使用最为广泛的是md5与sha1,但是由于其不再安全可靠,应该尽量避免在安全领域(例如密码的存储)上使用。

对于md5以及sha1这样的哈希算法,一些简单的值很容易被反查,例如,某个提供反查服务的网站:cmd5网站

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值