python 8行代码搞定 AES加解密

2023-11-16

python 实现AES加解密相关的知识,可以参考以下文章:
python实现AES加密解密

但该文章中,对于加密前数据的补全、及解密后去掉多余数据,由作者自己进行了封装。导致代码较为复杂。
实际可以使用库中pad和unpad来解决该问题,而使代码非常简洁。

代码如下:

import string
import base64
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad


def get_random_digits(size=16):
    """Generate random number by size"""
    return "".join(random.choice(string.digits) for i in range(size))


def get_aes_key_iv():
    """Generate AES cryptor key and iv"""
    return get_random_digits(16).encode(), get_random_digits(16).encode()


def aes_encrypt(plain_text, aes_key, aes_iv):
    """
    AES encrypt
    :param plain_text: bytes
    :param aes_key: bytes
    :param aes_iv: bytes
    :return: bytes
    """
    return AES.new(aes_key, AES.MODE_CBC, aes_iv).encrypt(pad(plain_text, AES.block_size))


def aes_decrypt(plain_text, aes_key, aes_iv):
    """
    AES decrypt
    :param plain_text: bytes
    :param aes_key: bytes, aes_key
    :param aes_iv: bytes, aes_iv
    :return: bytes
    """
    return unpad(AES.new(aes_key, AES.MODE_CBC, aes_iv).decrypt(plain_text), AES.block_size)


def test_aes_cryptor(data, my_key, my_iv):
    rData = aes_encrypt(data, my_key, my_iv)
    print("密文:", base64.b64encode(rData))  # 转换成base64
    rData = aes_decrypt(rData, my_key, my_iv)
    print("明文:", rData)


if __name__ == "__main__":
    my_key1, my_iv1 = get_aes_key_iv()
    data1 = "hello word"
    test_aes_cryptor(data1.encode(), my_key1, my_iv1)

运行结果如下:

密文: b'mBtSmX/dSUa3nKTXvP1Prg=='
明文: b'hello word'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 8行代码搞定 AES加解密 的相关文章

随机推荐

  • 时间数据可视化

    目录 时间序列概念 1 时间序列数据分类 2 时间序列数据可视化的作用 连续型数据 2 折线图 3 阶梯图 离散型时间序列数据 1 柱形图 2 分组柱形图 3 堆叠柱形图 4 散点图 具体操作 1 阶梯图 2 折线图 3 拟合曲线 4 散点
  • 小白上路~ element-vue 根据用户角色改变左侧导航栏

    使用 Element UI 做左侧导航栏时 可以让后台管理端的功能模块一目了然 但是管理员角色不止一种怎么办 难道我要写很多个代码类似的后台管理系统吗 答案当然是 不 跟着我来做一个可以根据角色来显示不同导航栏的后台管理系统吧 1 数据库表
  • Microsoft Edge安装

    Windows10 ltsc 安装Edge 联网安装 下载地址可以百度搜索edge 官网下载地址为 https www microsoft com zh cn edge 这只是个安装程序 打开后会下载真正的浏览器程序并安装 离线下载地址 在
  • SpringCloud开启熔断Hystrix相关注解@EnableCircuitBreaker/@SpringCloudApplication/@EnableHystrix

    很多视频教程和学习资料都是用的老版本来教学 因为互联网更新迭代太快 在这记录一下靠前版本所用 依赖 服务提供者
  • 后端如何解决跨域问题

    为什么会产生跨域 同一协议 http https 同一ip 同一端口 8080 8081 三同中有一个不同就产生了跨域 后端如何解决跨域问题 方法一 新建跨域配置文件 Configuration public class CorsConfi
  • OpenART mini 控制舵机

    OpenART mini 控制舵机 基本介绍 舵机的分类 代码呈现 PWM控制 PWM py 单个舵机代码 运行结果 整合代码 运行结果 两个舵机 代码 项目效果呈现 基本介绍 最近在做智能车 用的语言是python 做识别动物水果数字等
  • microsoft runtime dll_完美解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题

    病状 win8 win7系统经常出现软件不运行 提示 api ms win crt runtime l1 1 0 dll 丢失 下载安装即可解决
  • 服务器memcache清理缓存的方法

    首先打开cmd窗口 输入一下命令清除memcached缓存 1 连接 telnet 127 0 0 1 11214 2 查看状态 stats 3 清除缓存 flush all 显示ok以后 缓存就清理成功啦 4 退出memcache qui
  • 【CentOS7离线ansible-playbook自动化安装CDH5.16(内附离线安装包地址,及自动化脚本)】

    CentOS7 离线环境 使用ansible自动部署CDH5 16 前言 本文介绍如何使用作者开发的自动化脚本 离线部署cdh集群 只需要简单的配置下yum源和cdh集群节点IP等几个参数 就可实现一键部署cdh集群 省去配置mysql n
  • 内存颗粒和闪存颗粒的区别_NAND Flash闪存颗粒与SSD知识深度解析

    谈闪存 须从Wafer开始 Wafer即晶圆 是半导体组件 晶片 或 芯片 的基材 从沙子里面高温拉伸生长出来的高纯度硅晶体柱 Crystal Ingot 上切下来的圆形薄片称为 晶圆 采用精密 光罩 通过感光制程得到所需的 光阻 再对硅材
  • Android开发之EditText 详解(addTextChangedListener监听用户输入状态)

    为了实现像qq或者微信输入框的效果 当在EditText输入字符串时发送按钮显示 当输入框字符消除掉时按钮改变 所以这时候我就要用到addTextChangedListener 用它来监听用户输入状态 可以在监听中改变用户输入的内容或者提示
  • python读取和生成excel文件

    今天来看一下如何使用python处理excel文件 处理excel文件是在工作中经常用到的 python为我们考虑到了这一点 python中本身就自带csv模块 今天来看一下如何使用python处理excel文件 处理excel文件是在工作
  • 对象池(连接池):commons-pool2源码解析:GenericObjectPool的继承结构、构造方法

    概述 GenericObjectPool是apache commons pool 源码分析基于commons pool2 框架中的一个非常重要的类 解析GenericObjectPool就有必要先了解一下apache commons poo
  • 图文并茂开发AR小游戏全教程(二)

    需要识别卡 AR游戏 这个是不需要识别卡的 可放大缩小 旋转 感应重力偏移 可自行下载项目运行到真机上演示由于项目以及下文用到的素材较大 GItHub 无法上传 故传到百度云LLGameAR二 1 创建一个新场景 然后将新的场景保存成 Sc
  • 内网穿透——SSH远程连接树莓派

    前言 文章目录 前言 内网穿透实现公网SSH远程连接树莓派 1 在树莓派上安装 cpolar客户端 https www cpolar com 2 在树莓派浏览器中输入本地9200端口 3 在公共互联网的电脑的命令行界面输入命令 内网穿透实现
  • Python注释方式有哪些

    注释是对一段代码的解释和说明 可提高程序代码的可读性 让人们能够更加轻松地了解代码 尤其在大型项目开发和团队项目中 注释是必不可少的 任何编程语言都少不了注释 Python也不例外 以下是Python注释的具体用法 1 单行注释 Pytho
  • 抖音矩阵号系统搭建,企业同时管理1000+账号的基础逻辑

    短视频矩阵号系统开发功能涵盖 1 AI视频剪辑 2 创意灵感 3 多账号矩阵管理 4 视频排名优化 5 视频投放 6 企业号智能营销 6 AI视频拓客 7 企业员工管理等 开发思维导图如下 源码开发所需服务器配置 及环境 1 规格 最低4核
  • qt day1

    实现图形化登录界面 include myhomework h include
  • CUDA 动态链接库与静态链接库

    参考 CUDA C BEST PRACTICES GUIDE chapter 15 PREPARING FOR DEPLOYMENT 关于部署CUDA加速的程序时 往往对CUDA加速的程序编译为动态链接库或者静态链接库 这两者导致的区别是
  • python 8行代码搞定 AES加解密

    python 实现AES加解密相关的知识 可以参考以下文章 python实现AES加密解密 但该文章中 对于加密前数据的补全 及解密后去掉多余数据 由作者自己进行了封装 导致代码较为复杂 实际可以使用库中pad和unpad来解决该问题 而使