赞
踩
- 哈希,英文叫做 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'
- # 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)

- # 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)

- # 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)

套路一样
- 加解密算法,是对源数据 进行运算产生加密数据,以及反向过程,对加密数据反算出 源数据。
-
- 加解密算法 和 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()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。