常见加密解密 -- pycryptodomex库
安装
- windows
- pip install pycryptodomex
- ubuntu
- pip install pycryptodome
加密方式
- 单向加密:MD5
- 只能对数据进行加密,而不能解密
- 对称加密:DES、AES
- 数据加密与解密使用相同的密钥
- 非对称加密:RSA
- 比对称加密更安全、但速度慢千倍、通常用来做身份认证
- 什么是非对称加密:https://www.bilibili.com/video/av65017912/
MD5
https://www.cnblogs.com/jiyu-hlzy/p/11788091.html
DES
from Cryptodome.Cipher import DES
import binascii
# DES加密数据的长度须为8的的倍数,不够可以用其它字符填充
text = 'Welcome to DES'
if len(text) % 8 != 0:
text = text + "+" * (8 - len(text) % 8)
# 密钥:必须为8字节
key = b'12345678'
# 使用 key 初始化 DES 对象,使用 DES.MODE_ECB 模式
des = DES.new(key, DES.MODE_ECB)
# 加密
result = des.encrypt(text.encode())
print('加密后的数据:', result)
# 转为十六进制 binascii 的 b2a_hex 或者 hexlify 方法
print('转为十六进制:', binascii.b2a_hex(result))
# 解密
print('解密后的数据:', des.decrypt(result))
AES
from Cryptodome.Cipher import AES
from Cryptodome import Random
import binascii
text = 'Welcome to AES'
# 密钥key 长度必须为16(AES-128)、24(AES-192)或 32(AES-256)的Bytes长度
key = b'1234567890ABCDEF'
# 生成长度等于AES块大小的不可重复的密钥向量
iv = Random.new().read(AES.block_size)
# 使用 key 和 iv 初始化AES对象,使用 AES.MODE_CFB 模式
aes = AES.new(key, AES.MODE_CFB, iv)
# 加密
result = aes.encrypt(text.encode())
# 解密
# 不能在encrypt()之后调用decrypt()
# 需要用相同的key和iv初始化新的AES对象
decrypt_aes = AES.new(key, AES.MODE_CFB, iv)
print('密钥:', key)
print('iv:', iv)
print('十六进制的iv:', binascii.b2a_hex(iv))
print('加密后的数据:', result)
print('转为十六进制:', binascii.b2a_hex(result))
print('解密后的数据:', decrypt_aes.decrypt(result))
RSA
- 公钥加密、私钥解密
import rsa
text = 'Welcome to RSA'
# 生成密钥对
pubkey, prikey = rsa.newkeys(1024)
# 加密:使用公钥
result = rsa.encrypt(text.encode(), pubkey)
print('加密后的数据:',result)
# 解密:使用私钥
print('解密后的数据:',rsa.decrypt(result, prikey))
- 创建公钥
import rsa
text = 'Welcome to RSA'
# 公钥有两个值 n,e
public_n = "e0b509f62a8fc9" * 4
public_e = '010001'
# n、e必须为整数
# 将16进制的字符串转为整数
rsa_n = int(public_n, 16)
rsa_e = int(public_e, 16)
print('n:{}\ne:{}'.format(rsa_n, rsa_e))
# 创建公钥 rsa.PublicKey(n,e)
pubkey = rsa.PublicKey(rsa_n, rsa_e)
print('公钥类型:', type(pubkey))
print('公钥:', pubkey)
print('n:{}\ne:{}'.format(pubkey.n, pubkey.e))
print('加密后的数据:', rsa.encrypt(text.encode(), pubkey))
- 加签、验签
import rsa
pubkey, prikey = rsa.newkeys(1024)
# 加签 rsa.sign(原信息,私钥,加密方式) 生成加签过后的信息
signMessage = rsa.sign('投资房地产'.encode(), prikey, 'MD5')
print(signMessage)
# 验签 rsa.verify(需要验证的信息,加签过后的信息,公钥)
# 如果需要验证的信息,是原信息,返回加密方式
veri_1 = rsa.verify('投资房地产'.encode(),signMessage, pubkey)
print('投资房地产:',veri_1)
# 如果需要验证的信息,不是原信息(表示信息被篡改过),则验证失败报错:Verification failed
veri_2 = rsa.verify('投资互联网'.encode(),signMessage, pubkey)
print('投资互联网,',veri_2)
常见加密解密 -- pycryptodomex库的更多相关文章
- ios常见加密解密方法
在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...
- CTF密码学常见加密解密总结
https://blog.csdn.net/qq_40837276/article/details/83080460
- .NET下的加密解密大全(1): 哈希加密
.NET有丰富的加密解密API库供我们使用,本博文总结了.NET下的Hash散列算法,并制作成简单的DEMO,希望能对大家有所帮助. MD5[csharp]using System; using Sy ...
- 常见的加密解密算法-MD5
一.MD5加密概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 13 ...
- 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)
打开图形界面 18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...
- 加密解密 Python
常见加密方式和Python实现 1. 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们 ...
- linux基础之加密解密、PKI及SSL、创建私有CA
加密解密基础 1. 对称加密: 加密和解密使用同一个密钥 常见的加密算法有:DES.3DES.AES.Blowfish.Twofish.IDEA.RC6.CAST5 特性: 1. 加密.解密使用同一个 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- js加密后台加密解密以及验证码
该文档为转载内容: 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 ...
随机推荐
- PyQt5日历控件及相关操作
1.日历控件QCalendarWidget控件import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQ ...
- spark报错 java.lang.NoClassDefFoundError: scala/xml/MetaData
代码: 报错信息: java.lang.NoClassDefFoundError: scala/xml/MetaData 原因:确失jar包 <dependency> <groupI ...
- Vue 实现全局使用sass, less变量
首先 运行这行命令 npm install sass-resources-loader --save-dev: 在项目的build/utils.js中,找到 function generateLo ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 数组属性
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(di ...
- Excel实用知识1
纯手打,可能有错别字,使用的版本是office2013 转载请注明出处 http://www.cnblogs.com/hnnydxgjj/p/6329509.html ,谢谢 使用现成的模板 ”开头的 ...
- JavaScript - Promise对象
优点: 在异步执行的流程中,把执行代码和处理结果的代码清晰地分离(因为Promise对象有链式写法,有then和catch) 组合使用Promise,就可以把很多异步任务以并行和串行的方式组合起来执行 ...
- hdoj6703 2019 CCPC网络选拔赛 1002 array
题意 description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of the ...
- java8函数式编程实例
什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...
- mybatis typealias 问题
最近在学mybatis 在一个简单的问题上却花了挺长时间 网上也没发现有类似的案例 故记录一下 在configuration里面 typealias 和 properties 同时用会出错 具体原因 ...
- Codeforces1307D. Cow and Fields
对于本题,最短路,考虑bfs,那么我们可以跑2次bfs,求出每个点到1与n的最短路,设为x_a, x_b,那我们可以把问题转换成max(min{x_a+y_b,x_b+y_a}+1)(x,y属于1到n ...