最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)AES加密,解密的兩種方法

 更新時(shí)間:2020年10月03日 10:58:41   作者:凹凸曼大人  
這篇文章主要介紹了Python實(shí)現(xiàn)AES加密,解密的兩種方法,幫助大家更好的使用python加解密文件,感興趣的朋友可以了解下

第一種

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)
  # 字符串補(bǔ)位
  cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
  encryptedbytes = cipher.encrypt(data.encode('utf8'))
  # 加密后得到的是bytes類型的數(shù)據(jù)
  encodestrs = base64.b64encode(encryptedbytes)
  # 使用Base64進(jìn)行編碼,返回byte字符串
  enctext = encodestrs.decode('utf8')
  # 對(duì)byte字符串按utf-8進(jìn)行解碼
  return enctext


def AES_Decrypt(key, data):
  vi = '0102030405060708'
  data = data.encode('utf8')
  encodebytes = base64.decodebytes(data)
  # 將加密數(shù)據(jù)轉(zhuǎn)換位bytes類型數(shù)據(jù)
  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)
  # 去補(bǔ)位
  text_decrypted = text_decrypted.decode('utf8')
  return text_decrypted


key = '0CoJUm6Qyw8W8jud' #自己密鑰
data = 'sdadsdsdsfd' #需要加密的內(nèi)容
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)

  # 加密函數(shù),如果text不足16位就用空格補(bǔ)足為16位,
  # 如果大于16當(dāng)時(shí)不是16的倍數(shù),那就補(bǔ)足為16的倍數(shù)。
  def encrypt(self, text):
    text = text.encode('utf-8')

    cryptor = AES.new(self.key, self.mode,self.iv)
    # 這里密鑰key 長(zhǎng)度必須為16(AES-128),
    # 24(AES-192),或者32 (AES-256)Bytes 長(zhǎng)度
    # 目前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)
    # 因?yàn)锳ES加密時(shí)候得到的字符串不一定是ascii字符集的,輸出到終端或者保存時(shí)候可能存在問(wèn)題
    # 所以這里統(tǒng)一把加密后的字符串轉(zhuǎn)化為16進(jìn)制字符串
    return b2a_hex(self.ciphertext)

  # 解密后,去掉補(bǔ)足的空格用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("請(qǐng)輸入待加密數(shù)據(jù):")#
  e = pc.encrypt(data) # 加密
  d = pc.decrypt(e).encode() # 解密
  print("加密:", e)
  print("解密:", d)

以上就是Python實(shí)現(xiàn)AES加密,解密的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于Python實(shí)現(xiàn)AES加密,解密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

孟连| 周宁县| 达拉特旗| 宁南县| 长乐市| 特克斯县| 蒲城县| 肃宁县| 富平县| 错那县| 泰州市| SHOW| 云和县| 湄潭县| 贵港市| 屯留县| 宜兴市| 哈密市| 永清县| 绍兴县| 西昌市| 浠水县| 仪征市| 昌图县| 且末县| 平遥县| 新河县| 乐至县| 伽师县| 临沭县| 嘉祥县| 辰溪县| 历史| 额尔古纳市| 江安县| 永和县| 襄樊市| 永胜县| 都兰县| 铜川市| 沿河|