aes加密算法python语言实现_python-AES加密解密
转载https://www.jianshu.com/p/5d27888e7c93#!/xh
#!/usr/bin/env python
# -*- coding=utf-8 -*-
"""
AES加密解密工具类
@author jzx
@date 2018/10/24
此工具类加密解密结果与 http://tool.chacuo.net/cryptaes 结果一致
数据块128位
key 为16位
iv 为16位,且与key相等
字符集utf-8
输出为base64
AES加密模式 为cbc
填充 pkcs7padding
"""
import base64
from Crypto.Cipher import AES
import random
def pkcs7padding(text):
"""
明文使用PKCS7填充
最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理
:param text: 待加密内容(明文)
:return:
"""
bs = AES.block_size # 16
length = len(text)
bytes_length = len(bytes(text, encoding='utf-8'))
# tips:utf-8编码时,英文占1个byte,而中文占3个byte
padding_size = length if(bytes_length == length) else bytes_length
padding = bs - padding_size % bs
# tips:chr(padding)看与其它语言的约定,有的会使用'\0'
padding_text = chr(padding) * padding
return text + padding_text
def pkcs7unpadding(text):
"""
处理使用PKCS7填充过的数据
:param text: 解密后的字符串
:return:
"""
length = len(text)
unpadding = ord(text[length-1])
return text[0:length-unpadding]
def encrypt(key, content):
"""
AES加密
key,iv使用同一个
模式cbc
填充pkcs7
:param key: 密钥
:param content: 加密内容
:return:
"""
key_bytes = bytes(key, encoding='utf-8')
iv = key_bytes
cipher = AES.new(key_bytes, AES.MODE_CBC, iv)
# 处理明文
content_padding = pkcs7padding(content)
# 加密
encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))
# 重新编码
result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
return result
def decrypt(key, content):
"""
AES解密
key,iv使用同一个
模式cbc
去填充pkcs7
:param key:
:param content:
:return:
"""
key_bytes = bytes(key, encoding='utf-8')
iv = key_bytes
cipher = AES.new(key_bytes, AES.MODE_CBC, iv)
# base64解码
encrypt_bytes = base64.b64decode(content)
# 解密
decrypt_bytes = cipher.decrypt(encrypt_bytes)
# 重新编码
result = str(decrypt_bytes, encoding='utf-8')
# 去除填充内容
result = pkcs7unpadding(result)
return result
def get_key(n):
"""
获取密钥 n 密钥长度
:return:
"""
c_length = int(n)
source = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
length = len(source) - 1
result = ''
for i in range(c_length):
result += source[random.randint(0, length)]
return result
# Test
# 非16字节的情况
aes_key = get_key(16)
print('aes_key:' + aes_key)
# 对英文加密
source_en = 'Hello!'
encrypt_en = encrypt(aes_key, source_en)
print(encrypt_en)
# 解密
decrypt_en = decrypt(aes_key, encrypt_en)
print(decrypt_en)
print(source_en == decrypt_en)
# 中英文混合加密
source_mixed = 'Hello, 韩- 梅 -梅'
encrypt_mixed = encrypt(aes_key, source_mixed)
print(encrypt_mixed)
decrypt_mixed = decrypt(aes_key, encrypt_mixed)
print(decrypt_mixed)
print(decrypt_mixed == source_mixed)
# 刚好16字节的情况
en_16 = 'abcdefgj10124567'
encrypt_en = encrypt(aes_key, en_16)
print(encrypt_en)
# 解密
decrypt_en = decrypt(aes_key, encrypt_en)
print(decrypt_en)
print(en_16 == decrypt_en)
mix_16 = 'abx张三丰12sa'
encrypt_mixed = encrypt(aes_key, mix_16)
print(encrypt_mixed)
decrypt_mixed = decrypt(aes_key, encrypt_mixed)
print(decrypt_mixed)
print(decrypt_mixed == mix_16)
aes加密算法python语言实现_python-AES加密解密相关推荐
- aes加密算法python语言实现_python实现AES/DES/RSA/MD5/SM2/SM4/3DES加密算法模板汇总
都是作者累积的,且看其珍惜,大家可以尽量可以保存一下,如果转载请写好出处https://www.cnblogs.com/pythonywy 一.md5加密 1.简介 这是一种使用非常广泛的加密方式,不 ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- python rsa库_python RSA加密解密
RSA加密(pip install pycryptodome) 总结: Pycrypto提供了比较完善的加密算法.RSA广泛用于加密与解密,还有数字签名通信领域.使用Publick/Private秘钥 ...
- aes加密算法python语言实现_如何用Python实现AES CCM的加解密
1.简介 AES CCM被广泛应用于现代通讯中,在学习过程中需要验证数据的加解密的结果,那么有个方便修改的Python脚本工具就是一个迫切的需求. 2. 实施 我们下面介绍如何实现AES CCM的Py ...
- aes算法的C语言实现代码,AES加密算法c语言实现代码
AES加密算法c语言实现代码 #include "stdio.h" #include "memory.h" #include "time.h" ...
- 基于Python语言、RSA非对称加密的IRC聊天室客户端
源码地址: (55条消息) 基于Python语言.RSA非对称加密的IRC聊天室客户端源码与应用程序-Python文档类资源-CSDN文库 1 研究背景和现状 IRC是Internet Relay C ...
- 第10课 511遇见易语言大漠字库图片加密解密
第10课 511遇见易语言大漠字库图片加密解密 小知识 给图片加密码防止被人盗用 加密工具 大漠综合工具 如果要使用加密后的图片 那么在代码里面一定要在使用前 setpicpwd 小知识:给字库加密码 ...
- aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例
本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...
- aes加密算法c#语言实现,C#编程实现加密解密文件夹核心代码
类型:加密解密大小:296KB语言:中文 评分:8.0 标签: 立即下载 用C#语言实现一个文件夹锁的程序,网上类似的"xxx文件夹xxx"软件很多,但是基本上都是C/C++语言实 ...
最新文章
- 【git】git入门之把自己的项目上传到github
- npm如何删除node_modules文件夹
- iOS开发UI中懒加载的使用方法
- Apache配置代理服务器的方法(1)
- (转)linux基本变量学习:位置变量$0 、$1 shift轮替、本地变量、环境变量、特殊变量...
- 为了方便读者检索和阅读以往的内容,已开通“号内搜”功能
- 【硬件】存储的RAID技术详解
- html:运用表单表格制作简易个人简历
- 2021年最新DNF脚本框架
- 如何使用Xposed+JustTrustMe来突破SSL Pinning
- 蝉道Bug管理工具的环境搭建
- HDU 5336 BFS
- 《国史通鉴》- 宋朝
- ajax中返回sucess里使用this.$message()
- 雷军:企业如何渡过寒冬?你需要学会这5招
- 2020usnews计算机排名布朗,布朗大学排名在2020年USNEWS美国最佳综合大学排名第14...
- GBase 8c 远程数据库连接
- python线性回归预测pm2.5_基于随机森林算法的PM2.5预测
- 初学C语言:判断输入的数是否能被5整除。
- 编程大佬是否能记住代码?
热门文章
- MySQL高级知识(十四)——行锁
- Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标等
- Windows 10 上强制Visual Studio以管理员身份运行
- git---Git中.gitignore配置
- notepad++,vim驼峰命名与下划线的互相转换
- 关于HTML Button点击自动刷新页面的问题解决
- Python【第一篇】python安装、pip基本用法、变量、输入输出、流程控制、循环
- Java中怎么控制线程訪问资源的数量
- UVA 12169 Disgruntled Judge
- Real-time HTML Editor (实时网页编辑器)