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

加解密

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 hashlibprint(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 hashlibprint(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 hashlibprint(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, modeskey = 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.rhkb.cn/news/138470.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】ubuntu 20.04 + mongodb 4.4.14定时增量备份脚本

环境 ubuntu 20.04mongodb 4.4.14还没实际使用(20230922)后续到10月底如果有问题会修改 原理 只会在有新增数据时生成新的备份日期目录备份恢复时,如果恢复的数据库未删除,则会覆盖数据 准备 准备一个文件夹,用于…

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功(查看svn版本号) svnserve --version二、创建版本库 1、先建立目录,目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库,添加权限…

Unity工具——LightTransition(光照过渡)

需求描述 在游戏中,开发者为了让玩家更直接地看到待拾取的物品从而为其添加一种闪烁效果,或者模拟现实中闪烁的灯光效果,我能够想到的一种方案则是通过控制光照强度来实现,那么本篇文章我们就尝试通过这个方案来实现一下&#xff…

什么是Vue的Vetur插件?它有哪些功能

引言 在现代前端开发中,Vue.js已经成为了一个备受欢迎的JavaScript框架。随着Vue.js的流行,开发人员需要强大的工具来提高他们的生产力和Vue.js项目的质量。Vetur插件是一个为Vue.js开发者提供的强大工具,它不仅提供了丰富的功能&#xff0c…

vue框架实现表情打分效果

本来今天要实现这个功能 但是在网上查了一下 就csdn上有一个符合要求的 但是他竟然收费,痛心疾首啊 太伤白嫖党的心的 所以我手写了一个这个类似功能的代码 希望能帮到有这个需求的同学们 技术栈是VUE3 用其他技术栈的也可以看 因为逻辑很简单都一样的 // 问卷的虚拟数据 con…

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…

步步为营,如何将GOlang引用库的安全漏洞修干净

文章目录 引场景构建第一步、直接引用的第三方库升级修复策略1.确认是否为直接引用的第三方库2.找到需要升级的版本是否为release版本 第二步、间接引用的第三方库升级修复策略那么问题来了,我们这么间接引用库的对应的直接引用库是哪个呢? (…

Hadoop NameNode执行命令工作流程

Hadoop NameNode执行命令工作流程 客户端API或者CLI与NameNode的交互命令数据的格式(1) 预处理流程(2) 创建NameNode与NameNodePrcServer流程(3) HDFS API以及CLI的命令到NameNode的工作执行流程(4) 执行命令的参数流动 客户端API或者CLI与NameNode的交互命令数据的格式 hadoop…

Apache 原生 Hadoop 运维命令

Hadoop 1、检查原生hadoop和压缩库是否可用 hadoop checknative2、打印hadoop环境的配置路径 hadoop classpathHDFS 1、查看hdfs文件系统的状态 hdfs dfsadmin -report2、获取安全模式的状态 hdfs dfsadmin -safemode get安全模式下只可进行读操作 3、文件系统健康检查 …

LeetCode_拓扑排序_困难_2603.收集树中金币

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给…

10分钟设置免费海外远程桌面

前言 本教程将向您介绍如何使用 Amazon Lightsail 服务的免费套餐轻松搭建属于您的远程桌面。依托于 Amazon 全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐…

《向量数据库指南》——文心大模型+Milvus向量数据库搭建AI原生应用

亲爱的科技探险家们和代码魔法师们: 未来的钟声已经敲响,预示着一场极度炫酷的虚拟现实游戏即将展开。从初期简单的智能识别,到设计师级别的图纸设计,生成式AI技术(Generative AI)以其独特理念和创新模式重塑了传统内容生产效率和交互模式,在无数领域展现着非凡的才华。…

清易低功耗智能雨量监测站概述

一、低功耗智能雨量监测站概述产品概述 低功耗智能雨量监测站基于智能传感、无线通信、智能处理与智能控制等物联网技术的开发,利用智能传感技术,通过传感器测量降雨量,并使用物联网进行传输。无需专门的通信线路,在联网的状态下…

简单的手机电脑无线传输方案@固定android生成ftp的IP地址(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server 高级:固定android设备IP准备检查模块是否生效 windows 访问ftp服务器快捷方式命令行方式双击启动方式普通快捷方式映射新的网络位…

zabbix网络管理安装教程

安装: apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent 参考资源: 官网: 下载: 其它: 常用指令: 目标与应用价值: 部署难点&#…

【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码

冒泡排序原理 每次比较两个相邻的元素,将较大的元素交换至右端 冒泡排序执行过程输出效果 冒泡排序实现思路 每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序&…

在已知的二维坐标里找到最接近的点

一、业务场景 最近在研发的项目,在做可视化层,在全球地图上,对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后,需要将我们已有的数据库数据(业务项目)按照地址的经纬度,映射到…

GUN、MIT、Apache、BSD、MPL各种开源协议介绍和区别

文章目录 目前主流的开源协议GNU通用公共许可证(GNU General Public License,GPL)MIT许可证Apache许可证BSD许可证MPL Mozilla公共许可证(Mozilla Public License,MPL) 各种主流开源协议的区别GNU通用公共许…

玩转Nginx

Nginx是什么 Nginx(engine x)是一款的Web服务器、反向代理服务器,能够实现前端Web应用的部署、请求反向代理及负载均衡处理等功能。 特点 轻量,占用内存少高可靠高并发、高性能可扩展性好支持热部署BSD许可证(开源、可修改再发…

使用FFmpeg+ubuntu系统转化flac无损音频为mp3

功能需求如上题,我们来具体的操作一下: 1.先在ubuntu上面安装FFmpeg:sudo apt install ffmpeg 2.进入有flac音频文件的目录使用下述命令: ffmpeg -i test.FLAC -c:a libmp3lame -q:a 2 output.mp3 3.如果没有什么意外的话,你就能看到你的文件夹里面已经有转化好的mp3文件了 批…