温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python如何实现AES加密与解密

发布时间:2020-10-29 16:23:39 来源:亿速云 阅读:217 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关Python如何实现AES加密与解密,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

第一种

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加密与解密了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI