常见加密解密 -- 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 ...
随机推荐
- 201771010135杨蓉庆《面向对象程序设计(java)》第四周学习总结
学习目标 1.掌握类与对象的基础概念,理解类与对象的关系: 2.掌握对象与对象变量的关系: 3.掌握预定义类的基本使用方法,熟悉Math类.String类.math类.Scanner类.LocalDa ...
- python安装MySQLclient
直接使用pip命令安装mysqlclient : pip3 install mysqlclient 如果windows安装不了MySQL-python mysqlclient 参考以下解决方案: 这个 ...
- 吴裕雄--天生自然TensorFlow2教程:损失函数及其梯度
import tensorflow as tf x = tf.random.normal([2, 4]) w = tf.random.normal([4, 3]) b = tf.zeros([3]) ...
- Java面向对象编程 -3
this关键字 this可以算是Java里面比较复杂的关键字,因为this的使用形式约定了它的灵活性,在程序里面,使用this可以实现以下三类结构的描述: 当前类中的属性:this属性; 当前类中的方 ...
- ssh pubkey免密登陆远程主机
二.公钥登录 每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性. 1.在本机生成密钥对 使用ssh-keygen命令生成密钥对: ssh-ke ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程
问题背景 对于 MySQL 的 JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解(自信满满的自我认为!):如果大家不知道怎么检验,可以试着回答如下的问题 驱动表的选择 MySQ ...
- 一 Spring概述
知识点概要: 1 SpringIOC入门(XML).Spring的Bean管理.Spring属性注入 2 SpringIOC注解方式.Spring的AOP开发(XML) 3 Spring的AOP注解开 ...
- div display 常用属性
none:元素不被显示. block:元素将显示为块级元素,此元素前后会带有换行符. inline:行内元素(即一个挨着一个,都在同一行按从左至右的顺序显示,不单独占一行). 参考: http://w ...
- Spark教程——(11)Spark程序local模式执行、cluster模式执行以及Oozie/Hue执行的设置方式
本地执行Spark SQL程序: package com.fc //import common.util.{phoenixConnectMode, timeUtil} import org.apach ...
- Spring Boot项目中各配置文件的对比
application.properties是Spring Boot的全局配置文件,放在src/main/resources目录下或者类路径的/config下,作用是对一些默认配置的配置值进行修改. ...