哈希算法(hash)加密解密
【摘要】
一、哈希算法(hash)加密解密介绍
哈希,英文叫做 hash。哈希函数(hash function)可以把 任意长度的数据(字节串)计算出一个为固定长度的结果数据。我们习惯把 要计算 的数据称之为 源数据, 计算后的结果数据称之为 哈希值(hash value)或者 摘要(digests)。有好几种哈希函数,对应不同的算法,...
一、哈希算法(hash)加密解密介绍
-
哈希,英文叫做 hash。
-
哈希函数(hash function)可以把 任意长度的数据(字节串)计算出一个为固定长度的结果数据。
-
我们习惯把 要计算 的数据称之为 源数据, 计算后的结果数据称之为 哈希值(hash value)或者 摘要(digests)。
-
有好几种哈希函数,对应不同的算法, 常见有的 MD5, SHA1, SHA224, SHA256, SHA384, SHA512
-
-
哈希计算的特点是:
-
相同的 源数据, 采用 相同的哈希算法, 计算出来的哈希值 一定相同
-
不管 源数据 有多大,相同的哈希算法,计算出来的哈希值长度 都是一样长的。
-
-
算法 计算结果长度
-
MD5 16字节
-
SHA1 20字节
-
SHA224 28字节
-
SHA256 32字节
-
SHA384 48字节
-
SHA512 64字节
-
-
算法不可逆。
-
-
也就是说,不能通过 哈希值 反过来计算出 源数据。 所以哈希和我们常说的加密解密不同。
-
-
不同的源数据 使用同样的哈希算法,可能会产生相同的 哈希值,这被称之为碰撞率(collision rate)
-
-
各种哈希算法,计算的结果长度越长,碰撞率越低,通常耗费的计算时长也越长。
-
-
即使是 MD5 算法, 碰撞率也 非常小,小到几乎可以忽略不计。大约是 1.47*10的负29次方
二、加密方式
-
'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
-
'blake2b', 'blake2s',
-
'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
-
'shake_128', 'shake_256'
md5加密
-
# coding=utf-8
-
"""
-
@Project :pachong-master
-
@File :hash_test.py
-
@Author :gaojs
-
@Date :2022/7/11 21:15
-
@Blogs : https://www.gaojs.com.cn
-
"""
-
import hashlib
-
-
-
# 使用md5 算法
-
h = hashlib.md5()
-
-
# sha 256算法
-
# m = hashlib.sha256()
-
-
# 要计算的元数据必须是字符串格式
-
# 字符串对象需要encode转换为字节串对象
-
h.update("Hi, 我命由我不由天".encode())
-
-
# 产生哈希值对应的bytes对象
-
resultBytes = h.digest()
-
resultHex = h.hexdigest()
-
print(resultHex)
sha 256加密
-
# coding=utf-8
-
"""
-
@Project :pachong-master
-
@File :hash_test.py
-
@Author :gaojs
-
@Date :2022/7/11 21:15
-
@Blogs : https://www.gaojs.com.cn
-
"""
-
import hashlib
-
-
-
# 使用md5 算法
-
# h = hashlib.md5()
-
# md5 加密介入如下:8b365af9b1089f502e7bc60ac9c81ed2
-
# sha 256算法
-
h = hashlib.sha256()
-
# 要计算的元数据必须是字符串格式
-
# 字符串对象需要encode转换为字节串对象
-
h.update("Hi, 我命由我不由天".encode())
-
-
# 产生哈希值对应的bytes对象
-
resultBytes = h.digest()
-
resultHex = h.hexdigest()
-
# sha 256加密结果如下:8a3e8bf351d6bc5c311a6790f7aeeea46d955db7a4357653b21254380651623f
-
print(resultHex)
sha 512加密
-
# coding=utf-8
-
"""
-
@Project :pachong-master
-
@File :hash_test.py
-
@Author :gaojs
-
@Date :2022/7/11 21:15
-
@Blogs : https://www.gaojs.com.cn
-
"""
-
import hashlib
-
-
-
# 使用md5 算法
-
# h = hashlib.md5()
-
# md5 加密介入如下:8b365af9b1089f502e7bc60ac9c81ed2
-
# sha 512算法
-
h = hashlib.sha512()
-
# 要计算的元数据必须是字符串格式
-
# 字符串对象需要encode转换为字节串对象
-
h.update("Hi, 我命由我不由天".encode())
-
-
# 产生哈希值对应的bytes对象
-
resultBytes = h.digest()
-
resultHex = h.hexdigest()
-
# sha 512加密结果如下:
-
# c945f94c933078a77812afa75cd693ee17e581b9920696063cf50983fcb1a56d577565c3bcda05badc6c4ffdf64f1abbdd6dd0897c3e1620950b7ec31c96fe6c
-
print(resultHex)
套路一样
三、python如何解密hash算法
-
加解密算法,是对源数据 进行运算产生加密数据,以及反向过程,对加密数据反算出 源数据。
-
-
加解密算法 和 hash算法 不同点有:
-
-
加解密算法 是可逆的,hash算法是不可逆的。
-
-
hash算法可以对很大的数据产生比较小的哈希值,而加密算法源数据很大,加密后的数据也会很大
-
-
加解密算法 可以分为 对称加密 以及 不对称加密
-
-
对称加密 指 加密和解密 使用相同的 密钥 。
-
-
而 不对称加密 指 加密和解密 使用不同的 密钥,通常是一对密钥,称之为公钥(用来加密)和私钥(用来解密)。
-
-
比较常见的 对称加密算法有: AES, RC4, DES, 3DES, IDEA 等。
-
-
其中安全等级较高的是 AES。
-
-
而最知名的 不对称加密系统 就是 RSA (Rivest–Shamir–Adleman) 。
hash_jiemi.py
-
# coding=utf-8
-
"""
-
@Project :pachong-master
-
@File :hash_jiemi.py
-
@Author :gaojs
-
@Date :2022/7/11 21:34
-
@Blogs : https://www.gaojs.com.cn
-
"""
-
# 目前口碑比较好的Python加解密库有 cryptography 和 PyNaCl
-
from cryptography.fernet import Fernet
-
-
-
def jiami():
-
"""
-
加密解密过程
-
:return:
-
"""
-
# 下面是一个使用 该库进行 AES 加解密运算的例子
-
# 产生秘钥
-
key = Fernet.generate_key()
-
fin = Fernet(key)
-
-
strings = 'gaojs, 我命由我不由天!'
-
# 原信息必须是字符串
-
stringsBytes = strings.encode()
-
# 生成加密字节
-
token_result = fin.encrypt(stringsBytes)
-
print(token_result)
-
# 解密,返回值是字节串对象
-
result = fin.decrypt(token_result)
-
print(result.decode())
-
-
-
if __name__ == '__main__':
-
jiami()
文章来源: blog.csdn.net,作者:懿曲折扇情,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_41332844/article/details/126837319
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)