首页 > 其他分享 >AES加密

AES加密

时间:2024-07-16 10:33:30浏览次数:9  
标签:AES encrypt base64 date 加密 data

对称加密(AES)

AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个。
常见的对称加密:AES,DES,3DES.我们这里讨论AES。
安装:

pip install pycryptodome

AES加密最常用的模式就是CBC模式和ECB模式,当然还有很多其它模式,他们都属于AES加密。ECB模式和CBC模式俩者区别就是ECB不需要iv偏移量,而CBC需要。

长度
	16:*AES-128*
	24: *AES-192*
	32:*AES-256*

MODE加密模式.
	常见的ECB,CBC
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
"""
ECB 以 16:*AES-128* 算法为例:我们有一个要加密的,就会按照16分割,然后分别加密,再把所有的加密的组合起来
"""

image

CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解
难度。
"""
CBC:也是分块,第一块加密之后,第一块加密数据与第二块明文做异或
"""

image

CBC加密流程

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

# (1) 确认 key 和 iv 必须是16位/24位/32位
key = "0123456789123456".encode() 
iv = "qazwsxedcrfvtgby".encode() 
# (2)创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key, 模式, iv

# (3)对数据做加密,数据一定要是16/24/32的倍数
data = "xiaoxiaoxiao".encode()  # 数据不实16的倍数,下面使用pad函数补齐

pad_data = pad(data, 16) # 不是16的倍数,需要补齐,这里有个规律就是缺几位就补几【现在是缺4位补的就是4】
print(pad_data) # b'xiaoxiaoxiao\x04\x04\x04\x04'
encrypt_date = aes.encrypt(pad_data)
print(encrypt_date) # b'\x91\x8f\xcb\xcfM\xa8\xbf\xc2\x87\x8b\x1c\x01Y\xb5\x17X'

# (4)base64编码,原因是encrypt_date会有很多特殊的符号

base64_encrypt_date = base64.b64encode(encrypt_date).decode()
print(base64_encrypt_date) # kY/Lz02ov8KHixwBWbUXWA==

如果加密的是一个字典,在解密的时候就有一个“坑”

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

# (1) 确认 key 和 iv 必须是16位/24位/32位
key = "0123456789123456".encode() 
iv = "qazwsxedcrfvtgby".encode() 
# (2)创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key 模式 iv

# (3)对数据做加密,数据一定要是16/24/32的倍数
# data = "xiaoxiaoxiao".encode()  # 数据不实16的倍数,下面使用pad函数补齐
data = "{'a':1}".encode() 

pad_data = pad(data, 16) # 不是16的倍数,需要补齐,这里有个规律就是缺几位就补几【现在是缺4位补的就是4】
print(pad_data) # b"{'a':1}\t\t\t\t\t\t\t\t\t"
encrypt_date = aes.encrypt(pad_data)
print(encrypt_date) # b"\xaftD7'\x9e\x89(A\x80\x0e$\x19\x98\x80{"

# (4)base64编码,原因是encrypt_date会有很多特殊的符号

base64_encrypt_date = base64.b64encode(encrypt_date).decode()
print(base64_encrypt_date) # r3RENyeeiShBgA4kGZiAew==

解密

以上面的字典的加密为例,来解密

# 此段代码是个半成品
import base64
from Crypto.Cipher import AES

base64_encrypt_date = "r3RENyeeiShBgA4kGZiAew=="

# (1)base64解码
encrypt_date = base64.b64decode(base64_encrypt_date)
print(encrypt_date) # b"\xaftD7'\x9e\x89(A\x80\x0e$\x19\x98\x80{"


# (2)解密
# 2.1 确认好解密的参数
key = "0123456789123456".encode() 
iv = "qazwsxedcrfvtgby".encode() 
# 2.2 创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key 模式 iv

# 2.3 对数据进行解密
data = aes.decrypt(encrypt_date)
print(data) # b"{'a':1}\t\t\t\t\t\t\t\t\t"
此时我们的数据有了\t,,,因为我们在数据加密的是不够位数,就补齐的原因,所有要去掉【见下面代码】

完整版

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad



base64_encrypt_date = "r3RENyeeiShBgA4kGZiAew=="

# (1)base64解码
encrypt_date = base64.b64decode(base64_encrypt_date)
print(encrypt_date) # b'\x91\x8f\xcb\xcfM\xa8\xbf\xc2\x87\x8b\x1c\x01Y\xb5\x17X'


# (2)解密
# 2.1 确认好解密的参数
key = "0123456789123456".encode() 
iv = "qazwsxedcrfvtgby".encode() 
# 2.2 创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key 模式 iv

# 2.3 对数据进行解密
data = aes.decrypt(encrypt_date)
# 2.4 去掉填充
data = unpad(data, AES.block_size) # AES.block_size 默认就是16
print(data, type(data)) # b"{'a':1}"
# 2.5 将字节转换为字符串
print(data.decode(), type(data.decode()))# {'a':1} <class 'str'>
# 2.6 将字符串转换为字典
print(eval(data.decode()), type(eval(data.decode())))# {'a':1} <class 'dict'>

标签:AES,encrypt,base64,date,加密,data
From: https://www.cnblogs.com/a438842265/p/18304070

相关文章

  • 写真图片视频打赏系统源码全开源无加密
    这是一款开源的写真图片及视频打赏系统源码,顾名思义他可以做写真图片打赏站也可以做视频打赏站,支付对接了易支付,拥有独立代理后台,全部源码无加密,另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介绍了,看图吧!留给有需要的人!源码下载:图片视频打赏系统源码.zip可......
  • idea 出现[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全
    目录1.问题所示2.原理分析3.解决方法1.问题所示idea配置Database的时候,出现如下问题:Failed  Copy SearchError Troubleshooting[08S01]驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“Theserverselectedprotoco......
  • 使用gzexe加密shell脚本
    使用gzexe加密shell脚本是一个相对简单的过程。以下是具体的步骤:编写你的shell脚本:首先,你需要有一个shell脚本文件,比如myscript.sh。确保脚本可执行:使用chmod命令确保你的脚本文件是可执行的:chmod+xmyscript.sh使用gzexe加密脚本:在终端中,导航到脚本所在......
  • HNU暑假集训-恺撒Caesar密码
    问题的关键是找到密码替换的规则即:密码的第i个字母=原码在字母表后的第五个字母思路:1.先找到密码第i个字母在字母表中的位置s[i]-'A'      2.找到该位置前的第五个字母的在字母表的下标:(26+s[i]-'A'-5)%26聪明的你一定知道为什么先加26,再模26加......
  • Spring Boot项目Jar包加密详解
    目录引言Jar包加密的基础知识为什么需要加密Jar包Jar包加密的基本原理常用的Jar包加密工具ProGuardJavaguardJavaAgentSpringBoot项目Jar包加密实战使用ProGuard对SpringBoot项目进行加密集成Javaguard到SpringBoot项目中通过JavaAgent实现动态加密Jar包加密的......
  • 2024年五款企业加密软件(企业加密软件排行最新)
    关键是数字化时代,企业数据安全至关重要。一般来说信息技术快速发展,企业数据泄露风险上升。你知道的加密软件保护企业核心数据和商业机密,不可或缺。对我而言介绍几款企业加密软件,帮助选择适合需求的解决方案。固信加密软件https://www.gooxion.com/一.固信加密软件......
  • 加密算法详解:对称加密、非对称加密、Hash算法
    对称加密、非对称加密和哈希算法是信息安全中的三种主要加密技术,它们各自有不同的特点和用途:对称加密(SymmetricEncryption)工作原理:使用相同的密钥进行加密和解密。速度:通常非常快,适合大量数据的加密。密钥管理:参与通信双方必须安全地共享密钥,密钥泄露会导致安全风险。主......
  • 利用Selenium和PhantomJS绕过接口加密的技术探索与实践
    selenium+phantomjs绕过接口加密我们为什么需要selenium之前我们讲解了Ajax的分析方法,利用Ajax接口我们可以非常方便地完成数据的爬取。只要我们能找到Ajax接口的规律,就可以通过某些参数构造出对应的的请求,数据自然就能被轻松爬取到。但是,在很多情况下,Ajax请求的接口通......
  • uniapp-Java使用AES加密解密
    操作前uniapp需要安装  npminstallcrypto-js 在需要使用的界面加入 importCryptoJSfrom'crypto-js' java端<!--springsecurity安全认证--><dependency><groupId>org.springframework.boot</groupId>......
  • 文件加密软件谁好用丨2024文件加密软件TOP6推荐
    在数字化时代,数据安全已成为企业和个人不可忽视的重要议题。随着数据泄露事件频发,文件加密软件成为了保护敏感信息的首选工具。本文将为您推荐2024年度最值得信赖的六大文件加密软件,帮助您选择最适合自己需求的加密工具。1.域智盾软件以其强大的文档透明加密和权限管控功......