安装

  • windows

    • pip install pycryptodomex
  • ubuntu
    • pip install pycryptodome

加密方式

  • 单向加密:MD5

    • 只能对数据进行加密,而不能解密
  • 对称加密:DES、AES
    • 数据加密与解密使用相同的密钥
  • 非对称加密:RSA

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库的更多相关文章

  1. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...

  2. CTF密码学常见加密解密总结

    https://blog.csdn.net/qq_40837276/article/details/83080460

  3. .NET下的加密解密大全(1): 哈希加密

    .NET有丰富的加密解密API库供我们使用,本博文总结了.NET下的Hash散列算法,并制作成简单的DEMO,希望能对大家有所帮助. MD5[csharp]using System; using Sy ...

  4. 常见的加密解密算法-MD5

    一.MD5加密概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 13 ...

  5. 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)

    打开图形界面  18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...

  6. 加密解密 Python

    常见加密方式和Python实现 1. 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们 ...

  7. linux基础之加密解密、PKI及SSL、创建私有CA

    加密解密基础 1. 对称加密: 加密和解密使用同一个密钥 常见的加密算法有:DES.3DES.AES.Blowfish.Twofish.IDEA.RC6.CAST5 特性: 1. 加密.解密使用同一个 ...

  8. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  9. js加密后台加密解密以及验证码

    该文档为转载内容: 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 ...

随机推荐

  1. 配置和验证AP功率

    1.针对自主AP(Autonomous AP) 使用'power local'配置命令配置AP或Bridge Radio功率级别.在2.4 GHz,802.11g Radio上,您可以设置正交频分复用 ...

  2. quartz定时任务cron表达式讲解及翻译成现实语言的插件的使用详解

    cron表达式讲解 参见该网址: https://www.cnblogs.com/GarfieldTom/p/3746290.html cron表达式只有专业技术人员才看得懂,普通人不知道表达式是什么 ...

  3. VS中编码格式的问题(待总结)

    今天又遇到这样的事情了,VS中代码明明是正确的,却报某个变量未定义.百思不得解,前面增加了一个换行之后,竟然又神奇般的复原了. 最后确认是编码格式的问题,后来把有问题的那部分代码粘贴到微软的" ...

  4. Atcoder Grand Contest 039B(思维,BFS)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int col[207],s[207],n;c ...

  5. Tomcat访问控制及站点部署(以WAR包形式上传)!(重点)

    访问控制 首先安装好jdk以及apache-tomcat并能访问tomcat网页 点击server status了解服务状态会报403的错误 第一步:修改user.xml配置文件 [root@loca ...

  6. Mysql安装 ----> 基于源码包安装

    1)基于源码包安装MySQL [root@localhost ~]# rpm -q mysql mysql-server mariadb mairadb-server           //检查有没 ...

  7. Go语言学习笔记(四)

    一.字符串 1.字符串截取 可以使用len(字符串变量)获取字符串的字节长度,其中英文占1个字节长度,中文占用3个字节长度 可以使用变量名[n]获取到字符串第n+1个字节,返回这个字节对应的Unico ...

  8. 《iOS开发实战 从入门到上架App Store(第2版)》书籍目录

    第1章 开发准备 1.1 iOS 10新特性简述 1.1.1 新增触觉反馈编程接口 1.1.2 SiriKit框架的开放 1.1.3 引入Messages App 1.1.4 通知框架的整合与扩展 1 ...

  9. 文件目录T位

    场景: 共享目录设置T标志 可以看别人的文件,但不可以删除.修改别人的文件 除非是ROOT,目录的拥有者

  10. MAC97A6检测