python AES加密
2018-02-09 11:23
495 查看
因为原来的python aes 加密库Crypto已经很久没更新了,而且不支持python3,所以用了pyCryptodome这个库,它跟Crypto基本用法一样,但支持python2.4之后,和所有python3,安装:
pip install pycryptodome
直接上代码:#!usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AES加密解密
需要使用pyCryptodome模块进行AES加密,安装:
pip install pycryptodome
pyCryptodome支持 python2.4 之后的版本和所有 python3 的版本
"""
__author__ = 'LiTian'
from Crypto.Cipher import AES
import base64
class MyAES:
def __init__(self, key, iv):
self.key = bytes(key, encoding='utf8')
self.iv = bytes(iv, encoding='utf8')
self.mode = AES.MODE_CBC
def my_encrypt(self, text):
"""加密函数"""
# 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)
my_aes = AES.new(self.key, self.mode, self.iv)
# 如果AES加密的text不是16的倍数,那就使用PKCS5Padding来为text填充(例如缺6位,则补6个6),如果刚好是16的倍数,则补16个bytes的16
length = 16
count = len(text)
self.padding = length - (count % length)
text = text + (chr(self.padding) * self.padding)
text = bytes(text, encoding='utf8') # 加密的文本必须是bytes
cipher_text = my_aes.encrypt(text)
# 统一把加密后的bytes转化为base64
return str(base64.b64encode(cipher_text), encoding='utf8')
def my_decrypt(self, text):
"""用base64解密后,用rstrip()去掉补足的字符"""
my_aes = AES.new(self.key, self.mode, self.iv)
plain_text = my_aes.decrypt(base64.b64decode(bytes(text, encoding='utf8')))
return str(plain_text, encoding='utf8').rstrip(chr(self.padding))因为是我这边加密,然后同事那边用java解密的,所以我配合着他那边的程序,自己实现pkcs5来做填充,并将结果编译成base64,并转为string格式。
解密方面还不能做到单独使用,欢迎补充
pip install pycryptodome
直接上代码:#!usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AES加密解密
需要使用pyCryptodome模块进行AES加密,安装:
pip install pycryptodome
pyCryptodome支持 python2.4 之后的版本和所有 python3 的版本
"""
__author__ = 'LiTian'
from Crypto.Cipher import AES
import base64
class MyAES:
def __init__(self, key, iv):
self.key = bytes(key, encoding='utf8')
self.iv = bytes(iv, encoding='utf8')
self.mode = AES.MODE_CBC
def my_encrypt(self, text):
"""加密函数"""
# 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)
my_aes = AES.new(self.key, self.mode, self.iv)
# 如果AES加密的text不是16的倍数,那就使用PKCS5Padding来为text填充(例如缺6位,则补6个6),如果刚好是16的倍数,则补16个bytes的16
length = 16
count = len(text)
self.padding = length - (count % length)
text = text + (chr(self.padding) * self.padding)
text = bytes(text, encoding='utf8') # 加密的文本必须是bytes
cipher_text = my_aes.encrypt(text)
# 统一把加密后的bytes转化为base64
return str(base64.b64encode(cipher_text), encoding='utf8')
def my_decrypt(self, text):
"""用base64解密后,用rstrip()去掉补足的字符"""
my_aes = AES.new(self.key, self.mode, self.iv)
plain_text = my_aes.decrypt(base64.b64decode(bytes(text, encoding='utf8')))
return str(plain_text, encoding='utf8').rstrip(chr(self.padding))因为是我这边加密,然后同事那边用java解密的,所以我配合着他那边的程序,自己实现pkcs5来做填充,并将结果编译成base64,并转为string格式。
解密方面还不能做到单独使用,欢迎补充
相关文章推荐
- AES加密例子(python和php版本)
- python3.6 实现AES加密的示例(pyCryptodome)
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- python aes加密和 解密
- Python AES加密实例解析
- python3 执行AES加密方法
- 使用Python进行AES加密和解密的示例代码
- python3.6 实现AES加密----pyCryptodome
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- Python AES加密模块用法分析
- python3.6 实现AES加密、解密(改版)
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- python 加密解密(base64, AES)
- python实现的AES双向对称加密解密与用法分析
- Python3 django2.0 字段加密 解密 AES
- 使用Python实现AES加密解密
- windows中使用Python进行AES加密解密-文本文件加密工具
- Python使用PyCrypto实现AES加密功能示例
- python AES 加密
- lua-string-resty的aes加密解密,无法和python的aes进行对接