【Python】pyCryptodome模块实现AES加密、解密

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
本文主要通过pycryptodome库进行AES的简单加解密。

# -*- coding: utf-8 -*-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:encryption.py
#日期:2019-07-31
#备注:多种加解密方法    # pip install pycryptodome
用pyCryptodome模块带的aes先将秘钥以及要加密的文本填充为16位   AES key must be either 16, 24, or 32 bytes long
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
import base64
from Crypto.Cipher import AES#  bytes不是32的倍数那就补足为32的倍数
def add_to_32(value):while len(value) % 32 != 0:value += b'\x00'return value     # 返回bytes# str转换为bytes超过32位时处理
def cut_value(org_str):org_bytes = str.encode(org_str)n = int(len(org_bytes) / 32)print('bytes长度:',len(org_bytes))i = 0new_bytes = b''while n >= 1:i = i + 1new_byte = org_bytes[(i-1)*32:32*i-1]new_bytes += new_byten = n - 1if len(org_bytes) % 32 == 0:                   # 如果是32的倍数,直接取值all_bytes = org_byteselif len(org_bytes) % 32 != 0 and n>1:         # 如果不是32的倍数,每次截取32位相加,最后再加剩下的并补齐32位all_bytes = new_bytes + add_to_32 (org_bytes[i*32:])else:all_bytes = add_to_32 (org_bytes)          # 如果不是32的倍数,并且小于32位直接补齐print(all_bytes)return all_bytesdef AES_encrypt(org_str,key):# 初始化加密器aes = AES.new(cut_value(key), AES.MODE_ECB)#先进行aes加密encrypt_aes = aes.encrypt(cut_value(org_str))# 用base64转成字符串形式encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')  # 执行加密并转码返回bytesprint(encrypted_text)return(encrypted_text)def AES_decrypt(secret_str,key):# 初始化加密器aes = AES.new(cut_value(key), AES.MODE_ECB)# 优先逆向解密base64成bytesbase64_decrypted = base64.decodebytes(secret_str.encode(encoding='utf-8'))# 执行解密密并转码返回strdecrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '')print(decrypted_text)if __name__ == '__main__':org_str = 'http://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217590&idx=1&sn=14532c49bc8cb0817544181a10e9309f&chksm=90460825a7318133e7905c02e708d5222abfea930e61b4216f15b7504e39734bcd41cfb0a26d&scene=27#wechat_redirect'# 秘钥key = '123abc'secret_str = AES_encrypt(org_str,key)AES_decrypt(secret_str,key)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmeter环境部署

win环境下: 1、复制jmeter整个包到本地解压、安装jdk 2、jdk环境环境变量配置(电脑-属性-高级系统设置-环境变量) 系统变量JAVA_HOME 变量值C:\Program Files\Java\jdk1.8.0_101 用户变量path 变量值%JAVA_HOME%\bin cmd下输java或jav…

【Python】pdf2image模块+poppler将PDF转换为图片

有时我们需要将PDF转换成图片,今天我们主要说的是pdf2imagepoppler对PDF转换成图片格式。 pdf2image是个包装器,真正的转换工具是poppler GitHub地址:https://github.com/Belval/pdf2image ,上面也有相关的配置说明。 1、安装pdf…

jmeter五种参数化方式之CSV Data Set Config参数化

一、用户定义的变量 一般会设置全局不变的参数,如host、账号、密码等 设置名称username,password 值王荔,123456 线程设置2次和循环设置2次,2次采样器传参和结果一样 二、用户参数 添加用户参数 设置3组参数 参数化 当线程设置…

【Liunx服务器】阿里云服务器下部署多个tomcat服务

现在有这样一个场景,一个阿里云服务器上面已经有tomcat项目和多个maven项目,现在需要在一个新项目中配置一个空的tomcat,现将具体流程记录下来。 1.下载tomcat包或者找到已下载的包 2.将tomcat的包解压到指定项目目录:/data/proj…

python 按照当前日期创建文件

import time import os.path#获得当前系统时间的字符串 localtimetime.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time())) print(localtimelocaltime) #系统当前时间年份 yeartime.strftime(%Y,time.localtime(time.time())) #月份 monthtime.strftime(%m,time.localti…

数据结构二叉树遍历求后序

注意左右子树的递归 参考自https://blog.csdn.net/hou_blog/article/details/50015503

【数据库】Mysql函数DATE_ADD() 增加日期/时间

有这样一个场景:数据库还款计划表有到期还款日字段,正常是每月2日。但这个字段有些是每月1日,现需要统一改成2日,可以用到DATE_ADD函数,但是执行时需要注意:只能执行一次 DATE_ADD(date,INTERVAL expr type…

【数据库】Mysql函数DATE_FORMAT() 显示日期/时间

上一篇文章介绍了Mysql函数DATE_ADD(),这篇文章主要是为了解决上次遗留的问题: 把问题变得更复杂一点:假设有两个借款,其中一个借款1的到期还款日为2日,借款2的到期还款日为10日。这个字段loan_pmt_due_date日期有多个…

fiddler抓包工具使用技巧

一、快速找所有post、get、Result code200请求 1、所有post请求的图标都是带有向右的小箭头的那种,如果能让所有向右的小箭头都高亮显示就好了解决方案:输入命令:post 然后点击enter键回车,可以看到所有的post请求都是以蓝色的底…

【数据库】Mysql的CONCAT()函数拼接字符串

mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一: mysql CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 回到上一篇文章的问题:假设有两个借款…

Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理

一、JDBC Connection Configuration数据库配置元件 线程组-添加-配置元件-JDBC Connection Configuration Name:元件命名空间,请随意 Comments:注释,请随意 Variable Name:数据库连接池的名称,因为一个测试计划可以有多个JDBC Connection …

【数据库】Mysql的REPLACE()函数替换字符串

mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,用起来非常的方便。 REPLACE(str,from_str,to_str) 第一个字符串str中,将from_str替换为to_str 回到上一篇文章的问题:假设有两个借款,其中一个借款…

百度智能云文档汇总

百度智能云文档汇总目录: 一、百度语音-->https://cloud.baidu.com/doc/SPEECH/index.html 百度语音提供对自然语言文本的解析服务。自然语言文本是用户意图的表述,意图解析的目的就是将文本解析成意图表示。 二、文字识别-->https://cloud.baidu…

Python单元测试框架之unittest+requests+ddt+excel接口自动化测试

unitetest是python里单元测试框架,是基于 java 的 junit 测试框架 相当于是一个 python 版的 junit,除了 unittest,还有一个 pytest 框架 unittest.TestCase:TestCase类,所有测试用例类继承的基本类 一个TestCase的实例就是一个…

【业务篇】史上最全经验版用例之IOS和Android版APP版本更新、IOS版规避审核?

一、IOS app设置苹果审核 为了app提交苹果能快速审核通过,故需设置app审核状态,隐藏部分敏感功能 1、线上app版本1.0.0,新版本app2.0.0测试通过,设置2.0.0版本app审核状态,隐藏2.0.0版本部分敏感功能,提交…

Python之Pymysql模块操作MySQL增删改查

Python3 MySQL 数据库连接 - PyMySQL 驱动 PyMySQL 连接数据库,实现增删改查 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

Python之日志处理(logging模块)详解

logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点 1、可以通过设置不同的日志等级,在release版本中只输出重…

神秘的安全测试思考案例(一)

定义:安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。 概念:安全测试是检查系统对非法侵入渗透的防范能力。 准则:理论上来讲,只要有足够的时间和资源,没有无法进…

STL Map学习总结

1、 Map是关联容器,以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入删除等操作都可以在O(log n)时间内完成 2、它的特点是增加和删除节点…

【功能业务篇】APP获取用户定位、传参经纬度思考

常用的三种定位方式有:基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位: GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定位慢、室…