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

news2024/12/23 17:04:31

加解密

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

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

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

公钥加密,私钥解密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+ts 实现移动端分页

current 开始页码 pageSize 结束页码 const sizeref<number>(10) //一页显示十条 const eachCurrentPageref<number>(1) //默认是第一页interface ITdata {current: number,pageSize: number,// xxxx 其他参数... } const selectApplyList ref<…

vue-h5:移动Web单击事件和延迟300ms的问题

在PC端的网页&#xff0c;大部分的交互是通过click事件来实现的&#xff0c;然而在移动端&#xff0c;则是通过touch事件来实现触摸交互。 单击或者点击事件&#xff0c;指的是鼠标按下并且在短时间内放开【一般是小于300ms】。 那么移动端&#xff0c;也是类似&#xff0c;在…

大模型微调方法

下面是一些参数高效的微调大模型方法&#xff1a; Adapter 模型总览 Adapter作为一个插件加入到大模型内&#xff0c;微调下游任务时&#xff0c;固定大模型参数&#xff0c;只训练Adapter参数。 LoRA LoRA名为大语言模型的低阶适应&#xff0c;最初设计用于微调LLM&#xf…

面向未来的服务网格发展:展望服务网格技术未来的发展方向和趋势

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

RocketMQ 发送顺序消息

文章目录 顺序消息应用场景消息组&#xff08;MessageGroup&#xff09;顺序性生产的顺序性MQ 存储的顺序性消费的顺序性 rocketmq-client-java 示例&#xff08;gRPC 协议&#xff09;1. 创建 FIFO 主题生产者代码消费者代码解决办法解决后执行结果 rocketmq-client 示例&…

Nginx配置负载均衡时访问地址无法生效

场景还原 今天有小伙伴练习Nginx配置负载均衡时总是无法使用配置好的网址访问 配置文件信详情 http {# 负载均衡 后端IP地址和端口 webservers 策略 轮询upstream webservers{server 192.168.1.100:8080 weight90; server 127.0.0.1:8080 weight10; }server{listen 80;ser…

基于Java+SpringBoot+Vue的旧物置换网站设计和实现

基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步&#xff0c;旧物也成人们的烦恼&#xff0c;…

深度学习中安装了包但是依然导入(import)失败这一问题,例如pytorch环境下已经安装了scikit-learn但是import不了

在跑深度学习模型的时候我们要先搭建pytorch环境&#xff0c;这个环境跟windows环境是不同的&#xff0c;我们默认在windows中安装的包在当前的虚拟环境中读取不到&#xff0c;所以导致我们明明安装了包但是依然在实际的导入中(import)报错。解决办法就是我们去虚拟环境中安装包…

使用Scrapy构建高效的网络爬虫

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Scrapy是一个强大的Pyth…

电脑怎么取消磁盘分区?

有时候&#xff0c;我们的电脑会出现一个磁盘爆满&#xff0c;但另一个却空着&#xff0c;这时我们可以通过取消磁盘分区来进行调整&#xff0c;那么&#xff0c;这该怎么操作呢&#xff1f;下面我们就来了解一下。 磁盘管理取消磁盘分区 磁盘管理是Windows自带的磁盘管理工具…

展会动态 | 迪捷软件邀您参加2023世界智能网联汽车大会

*9月18日之前注册的观众免收门票费* 由北京市人民政府、工业和信息化部、公安部、交通运输部和中国科学技术协会联合主办的2023世界智能网联汽车大会将于9月21日-24日在北京中国国际展览中心&#xff08;顺义馆&#xff09;举行。 论坛背景 本届展会以“聚智成势 协同向新——…

论文阅读 - Natural Language is All a Graph Needs

目录 摘要 Introduction Related Work 3 InstructGLM 3.1 Preliminary 3.2 Instruction Prompt Design 3.3 节点分类的生成指令调整 3.4 辅助自监督链路预测 4 Experiments 4.1 Experimental Setup 4.2 Main Results 4.2.1 ogbn-arxiv 4.2.2 Cora & PubMed 4.…

类似东郊到家上门按摩小程序/包括商家入驻、服务查询、订单管理、用户评价等

类似东郊到家上门按摩小程序&#xff0c;简单前端模版。覆盖产品&#xff0c;订单&#xff0c;技师&#xff0c;招聘&#xff0c;充值&#xff0c;优惠等功能。 东郊到家小程序同城预约上门小程序的功能非常齐全&#xff0c;包括商家入驻、服务查询、订单管理、用户评价等&…

全国职业技能大赛云计算--高职组赛题卷④(私有云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;私有云&#xff09; 第一场次题目&#xff1a;OpenStack平台部署与运维任务1 基础运维任务&#xff08;5分&#xff09;任务3 OpenStack云平台运维&#xff08;15分&#xff09;任务4 OpenStack云平台运维开发&#xff08;1…

数据结构——八叉树

八叉树&#xff08;Octree&#xff09;是一种用于表示和管理三维空间的树状数据结构。它将三维空间递归地分割成八个八分体&#xff08;octant&#xff09;&#xff0c;每个八分体可以继续分割&#xff0c;以实现对三维空间的更精细的划分。八叉树通常用于解决空间搜索和查询问…

高级深入--day27

Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。 Scrapy 使用了 Twisted[twɪstɪd](其主要对手是T…

如何下载安装 WampServer 并结合 cpolar 内网穿透,轻松实现对本地服务的公网访问

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

jvm中对象创建、内存布局以及访问定位

对象创建 Java语言层面&#xff0c;创建对象通常&#xff08;例外&#xff1a;复制、反序列化&#xff09;仅仅是一个new关键字即可&#xff0c;而在虚拟机中&#xff0c;对象&#xff08;限于普通Java对象&#xff0c;不包括数组和Class对象等&#xff09;的创建又是怎样一个过…

基于SSM的电动车租赁网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…