Python实现AES加密,解密的两种方法


Posted in Python onOctober 03, 2020

第一种

import base64
from Crypto.Cipher import AES


# 密钥(key), 密斯偏移量(iv) CBC模式加密

def AES_Encrypt(key, data):
  vi = '0102030405060708'
  pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
  data = pad(data)
  # 字符串补位
  cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
  encryptedbytes = cipher.encrypt(data.encode('utf8'))
  # 加密后得到的是bytes类型的数据
  encodestrs = base64.b64encode(encryptedbytes)
  # 使用Base64进行编码,返回byte字符串
  enctext = encodestrs.decode('utf8')
  # 对byte字符串按utf-8进行解码
  return enctext


def AES_Decrypt(key, data):
  vi = '0102030405060708'
  data = data.encode('utf8')
  encodebytes = base64.decodebytes(data)
  # 将加密数据转换位bytes类型数据
  cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
  text_decrypted = cipher.decrypt(encodebytes)
  unpad = lambda s: s[0:-s[-1]]
  text_decrypted = unpad(text_decrypted)
  # 去补位
  text_decrypted = text_decrypted.decode('utf8')
  return text_decrypted


key = '0CoJUm6Qyw8W8jud' #自己密钥
data = 'sdadsdsdsfd' #需要加密的内容
AES_Encrypt(key, data)
enctext = AES_Encrypt(key, data)
print(enctext)
text_decrypted = AES_Decrypt(key, enctext)
print(text_decrypted)

第二种

#!/usr/bin/env python
#encoding=‘utf-8'
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto import Random

class PrpCrypt(object):

  def __init__(self, key):
    self.key = key.encode('utf-8')
    self.mode = AES.MODE_CBC
    self.iv = Random.new().read(AES.block_size)

  # 加密函数,如果text不足16位就用空格补足为16位,
  # 如果大于16当时不是16的倍数,那就补足为16的倍数。
  def encrypt(self, text):
    text = text.encode('utf-8')

    cryptor = AES.new(self.key, self.mode,self.iv)
    # 这里密钥key 长度必须为16(AES-128),
    # 24(AES-192),或者32 (AES-256)Bytes 长度
    # 目前AES-128 足够目前使用
    length = 16
    count = len(text)
    if count < length:
      add = (length - count)
      # \0 backspace
      # text = text + ('\0' * add)
      text = text + ('\0' * add).encode('utf-8')
    elif count > length:
      add = (length - (count % length))
      # text = text + ('\0' * add)
      text = text + ('\0' * add).encode('utf-8')
    self.ciphertext = cryptor.encrypt(text)
    # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
    # 所以这里统一把加密后的字符串转化为16进制字符串
    return b2a_hex(self.ciphertext)

  # 解密后,去掉补足的空格用strip() 去掉
  def decrypt(self, text):
    cryptor = AES.new(self.key, self.mode, self.iv)
    plain_text = cryptor.decrypt(a2b_hex(text))
    # return plain_text.rstrip('\0')
    return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
  pc = PrpCrypt('0CoJUm6Qyw8W8jud') # 初始化密钥
  data = input("请输入待加密数据:")#
  e = pc.encrypt(data) # 加密
  d = pc.decrypt(e).encode() # 解密
  print("加密:", e)
  print("解密:", d)

以上就是Python实现AES加密,解密的两种方法的详细内容,更多关于Python实现AES加密,解密的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
开始着手第一个Django项目
Jul 15 Python
Python Requests 基础入门
Apr 07 Python
详解python 发送邮件实例代码
Dec 22 Python
python 中的int()函数怎么用
Oct 17 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
Django之路由层的实现
Sep 09 Python
python中os包的用法
Jun 01 Python
学python最电脑配置有要求么
Jul 05 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
python实现AdaBoost算法的示例
Oct 03 #Python
Django创建一个后台的基本步骤记录
Oct 02 #Python
Python中qutip用法示例详解
Oct 02 #Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 #Python
Python通过fnmatch模块实现文件名匹配
Sep 30 #Python
Python tempfile模块生成临时文件和临时目录
Sep 30 #Python
Python实现定时监测网站运行状态的示例代码
Sep 30 #Python
You might like
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
php目录拷贝实现方法
2015/07/10 PHP
非常实用的php验证码类
2016/05/15 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
在视频前插入广告
2006/11/20 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
简单实现js浮动框
2016/12/13 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
vue的一个分页组件的示例代码
2017/12/25 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Python判断Abundant Number的方法
2015/06/15 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
virtualenv介绍及简明教程
2020/06/23 Python
python文件及目录操作代码汇总
2020/07/08 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
日语专业个人的求职信
2013/12/03 职场文书
绿色学校实施方案
2014/03/31 职场文书
投资合作协议书
2014/04/17 职场文书
网络技术专业求职信
2014/05/02 职场文书
男方婚礼答谢词
2015/01/20 职场文书
幼师自荐信范文
2015/03/06 职场文书
利用python做表格数据处理
2021/04/13 Python
Python import模块的缓存问题解决方案
2021/06/02 Python
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python