功能基础篇2——常用哈希和加密算法介绍及Python相关库与实现

2023-09-19 00:06:39

加解密

https://docs.python.org/3/library/crypto.html

三方库推荐,https://cryptography.io/en/latest/

Criptography,https://pypi.org/project/cryptography/

PyCryptodome,a fork of PyCrypto,https://pypi.org/project/pycryptodome/

PyCrypto,unmaintained,https://www.pycrypto.org/

PyNaCl,https://pypi.org/project/PyNaCl/

通用哈希算法

hash,哈希、散列,散列函数是密码学中的基础工具,并非加密算法。

https://docs.python.org/3/library/hashlib.html

MD5

Message Digest 5,信息摘要5,用于生成文件唯一摘要,可近似认为不同文件有唯一MD5值(信息摘要)。

MD5已被攻破(即找到了在一定复杂度内找到碰撞的算法),王小云院士有相关研究,RFC6151中禁止MD5用于HMAC。

  • 固定压缩,从任意长度信息计算出固定128位的哈希值
  • 容易计算,基于原信息计算出MD5值较为容易
  • 抗碰撞,伪造一段相同MD5值的信息很难(但并非不可)
  • 抗修改,改动信息(即使一个字节)会造成MD5值发生较大变化
文件完整性校验

软件下载通常会提供MD5等方式校验文件,https://dev.mysql.com/downloads/mysql/

在这里插入图片描述

云盘秒传

上传文件时计算文件MD5,云盘系统中有该MD5值的文件即可秒传。

# 可以用来检测有没有抄错诗(笑)
import hashlib

print(hashlib.md5("黄河远上白云间一片孤城万仞山羌笛何须怨杨柳春风不度玉门关".encode(
    "UTF-8")).hexdigest())  # 3a3b5f524e4b6b056b373f1ed28c2ab6
print(hashlib.md5("黄河远上白云一片孤城万仞山羌笛何须怨杨柳春风不度玉门关".encode(
    "UTF-8")).hexdigest())  # e66786b96a78b740f9de999e3384317b

# 盐值,就是把一个值和原文混合一起计算
# 静态盐
md5 = hashlib.md5(bytes('盐值', encoding='utf8'))
md5.update(b"Hello World!")
print(md5.hexdigest())
# 动态盐,比如用户名密码,使用用户名一部分加某些字符作为盐,可以基本做到每个用户的盐不一样
md5 = hashlib.md5(bytes('盐值', encoding='utf8'))
md5.update(b"Hello ")  # 可以分次
md5.update(b"World!")
print(md5.hexdigest())

SHA

Secure Hash Algorithm,安全哈希算法,一系列算法,包括SHA-0、SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)和SHA3(SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256)。

SHA-0、SHA-1已被攻破,王小云院士有相关研究。

import hashlib

print(hashlib.sha256("黄河远上白云间一片孤城万仞山羌笛何须怨杨柳春风不度玉门关".encode(
    "UTF-8")).hexdigest())  # c3df60edca13163d4892f336227669790bd8faed37359dee37fafc83876b0102
print(hashlib.sha256("黄河远上白云一片孤城万仞山羌笛何须怨杨柳春风不度玉门关".encode(
    "UTF-8")).hexdigest())  # 5c4c88e93a5931a19dcc53d13a1930d7a42390bf1d231d65e7858bac8f4b134f

MAC

https://docs.python.org/3/library/hmac.html

Message Authentication Code,信息认证码,基于密钥、原始消息、MAC算法三者计算出消息的MAC,密钥共享与发送者和接收者之间,可近似保证消息完整性和发送接收双方身份合法性。

HMAC

keyed-hash message authentication code,密钥散列消息认证码,MAC实现之一,MAC算法采用哈希函数,例如SHA家族,即基于密钥、原始消息、哈希函数计算MAC。

import hmac
import hashlib

print(hmac.new(
    b'a secret key',  # 密钥,消息发送双方共享
    'Hello World'.encode("UTF-8"),  # 原始消息
    hashlib.sha256).hexdigest())  # 摘要算法

对称加密算法

对称加密算法加密和解密使用相同密钥。

EDS

Data Enctyption Standard,DES,数据加密标准,有时称EDS使用的算法为EDA(Data Encryption Algorithm)。后被3DES取代。

TDEA(3DES)

Triple Data Encryption Algorithm,TDEA,三重数据加密算法,亦称3DES,对每个数据块使用三次DES。后被AES取代。

AES

Advanced Encryption Standard, AES,高级加密标准。

import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes

key = os.urandom(32)  # 256 bits
iv = os.urandom(16)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
encryptor = cipher.encryptor()
ct = encryptor.update(b"a secret message") + encryptor.finalize()
print(ct)
decryptor = cipher.decryptor()
print(decryptor.update(ct) + decryptor.finalize())

非对称加密算法

非对称加密算法加密和解密使用不同密钥,分为私钥和公钥,私钥私人持有,公钥公开分发,私钥加密公钥解密和公钥加密私钥解密均有不同应用场景。

RSA

RSA由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)共同提出,RAS取自三者姓氏首字母。

ECC

Elliptic Curve Cryptography,ECC,椭圆曲线密码学,基于椭圆曲线的非对称加密算法。

信息摘要,message digest

消息摘要算法是哈希算法的一种应用场景,相比于一般哈希算法,消息摘要算法要保证逆向难度大、抗碰撞,消息摘要用于对消息计算出“数字指纹”。

  • 摘要保证消息完整性

数字签名,digital signature

数字签名用于保证消息完整性、发送者身份认证,并不用于加密信息。

RSA算法可用于数字签名。RSA签名,对消息明文使用摘要算法计算摘要值,使用RAS算法和私钥对摘要信息加密得到签名。RSA验签,对消息明文使用摘要算法计算摘要值,使用RSA算法和公钥对签名进行解密获取摘要值,对比两个摘要值,不一致说明消息被篡改,一致可以说明消息正确且发送人所持私钥和收信人所持公钥对应。

私钥签名,公钥验签。

  • 摘要保证消息完整性
  • 解密出摘要发信人可以确认发信人一定持有配对私钥,基于公钥可确认发信人身份

数字证书,digital certificate

PKI,Public Key Infrastructure,公开密钥基础设施,包含证明书、认证机构、证书库三要素,用于签发数字证书,数字证书遵循X.509。

数字证书解决数字签名中公钥信任问题,数字签名保证信息一定由收信人所持公钥的对应私钥持有人发送,若公钥本身有问题,如A将B的公钥换成自己的就可以使用自己的私钥冒充B发送信息,数字证书是由可信任三方证书认证机构私钥对信息发送方公钥和发送方身份信息进行加密,发送消息是连同数字证书一同发送,可以保证公钥持有人的身份。

数字证书相当于将公钥持有人身份篡改风险转移到CA(Certificate Authority)机构,依赖于CA机构的受信任程度,若CA机构被攻破并篡改信息,证书依然不可信。

SSL证书是数字证书的一种。

数字信封,digital envelope

封信封,使用对称算法和密钥对明文加密得到密文,使用非对称算法和公钥对对称密钥加密获取密钥密文。此时信息已加密,加密密钥已加密,使用的是公钥,只有持有私钥的人可以获取信件信息。

解信封,使用非对称算法和私钥对密钥密文解密获取对称密钥,使用对称密钥解密信件信息。

公钥加密,私钥解密。

更多推荐

Python+Requests+Pytest+YAML+Allure实现接口自动化

本项目实现接口自动化的技术选型:Python+Requests+Pytest+YAML+Allure,主要是针对之前开发的一个接口项目来进行学习,通过Python+Requests来发送和处理HTTP协议的请求接口,使用Pytest作为测试执行器,使用YAML来管理测试数据,使用Allure来生成测试报告一、项目说明本

手动开发-实现SpringMVC底层机制--小试牛刀

文章目录前端控制器Controller注解RequestMapping注解自定义容器LingWebApplicationContext设计handlerList完成分发请求Service注解和AutoWired注解RequestParam注解完整代码在这里说的底层机制的实现主要是指:前端控制器、Controller、S

Appium混合页面点击方法tap的使用

原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发;HTML5(h5)应用开发,是利用Web技术进行的App开发。目前,市面上很多app都是原生和h5混合开发,这样做的好处在于:1)开发效率高,节约时间同一套代码Android和IOS基本都可用。2)更新和部署比

北大王选实验室 | 摘要已死?

深度学习自然语言处理原创作者:Winnie最新一篇研究里探索了大型语言模型(LLMs)在文本摘要这一领域的表现。他们设计了新的数据集,通过一系列人类评估实验评估LLMs在不同摘要任务中的表现。惊人的是,大多数人类评估者实际更倾向于选择LLM生成的摘要,甚至超过了参考摘要(人工编写)的标准。这个结果意味着,LLMs的介入

《红警3》因计算机中丢失d3dx9_35.dll无法打开游戏怎么办?最新解决方法推荐

d3dx9_35.dll是DirectX9.0c的一部分,它是一个动态链接库(DLL),包含了许多用于支持DirectX9.0c功能的函数和类。DirectX是一种由微软开发的游戏和多媒体应用程序编程接口,它提供了许多功能,如3D图形、音频、输入等,以便开发人员能够更轻松地创建高质量的游戏和多媒体应用程序。1、d3dx

lambda

一个lambda表达式表示一个可调用的代码单元。可以将其理解为一个未命名的内联函数。与普通函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。与普通函数不同的是,lambda可以定义在其他函数内部。一个lambda表达式具有如下形式:[capturelist](parameterlist)->retu

骨髓小游戏

欢迎来到程序小院骨髓玩法:骨髓推塔小游戏,敌方士兵进入到我方高塔会毁坏建筑,我方可派兵前去迎战,我方:骑兵、长枪兵、弓兵、敌法:骷髅骑兵、骷髅长枪兵、骷髅弓兵,快去消灭敌人吧^^。开始游戏https://www.ormcc.com/play/gameStart/184html<divid="game"></div>cs

【EI会议】第三届大数据、人工智能与风险管理国际学术会议 (ICBAR 2023)

第三届大数据、人工智能与风险管理国际学术会议(ICBAR2023)20233rdInternationalConferenceonBigData,ArtificialIntelligenceandRiskManagement第三届大数据、人工智能与风险管理国际学术会议(ICBAR2023)将于2023年11月24-26

华为云云服务器评测 [Vue3 博物馆管理系统] 使用Vue3、Element-plus菜单组件构建轮播图

系列文章目录华为云云服务器评测第一章[linux实战]华为云耀云服务器L实例Java、node环境配置华为云云服务器评测第二章[linux实战]Unbutnu添加SSHKey、启动Springboot项目华为云云服务器评测第三章[linux实战]使用Vue3、Element-plus菜单组件构建轮播图华为云云服务器评测

Windows10怎么清除运行框中历史记录?电脑中怎么清除活动历史记录?

Windows10怎么清除运行框中历史记录?电脑中怎么清除活动历史记录?Win10怎么清除运行框中历史记录?那小编就来给大家解答一下吧,希望可以帮助到大家吧。清除运行框中历史记录1、在Win10系统下,按住键盘的“Win+R”快捷组合键,打开“运行”对话狂。2、在打开的“运行”对话框中,输入“regedit”命令,然后

计算机IO原理

一、中断机制在IO处理中有2种思路,一种就是轮训(polling)机制,一种是中断(interrupt)机制,前置是一种同步的通信机制,不是计算机中IO采用的机制,我们重点来说明中断机制。CPU停下当前的工作任务,去处理其他事情,处理完后回来继续执行刚才的任务,这一过程便是中断。中断分为外部中断和内部中断。外部中断可屏

热文推荐