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

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

 更新時間:2020年10月03日 10:58:41   作者:凹凸曼大人  
這篇文章主要介紹了Python實現(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)
  # 字符串補位
  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進行編碼,返回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)
  # 將加密數(shù)據(jù)轉換位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)
  # 去補位
  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)

  # 加密函數(shù),如果text不足16位就用空格補足為16位,
  # 如果大于16當時不是16的倍數(shù),那就補足為16的倍數(shù)。
  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字符集的,輸出到終端或者保存時候可能存在問題
    # 所以這里統(tǒng)一把加密后的字符串轉化為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("請輸入待加密數(shù)據(jù):")#
  e = pc.encrypt(data) # 加密
  d = pc.decrypt(e).encode() # 解密
  print("加密:", e)
  print("解密:", d)

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

相關文章

最新評論

托克逊县| 岢岚县| 天津市| 抚州市| 留坝县| 盖州市| 姚安县| 紫阳县| 秭归县| 太康县| 沙雅县| 甘谷县| 尚志市| 江油市| 诸城市| 泰州市| 巴林左旗| 大同市| 东山县| 山东省| 迁西县| 信宜市| 车致| 两当县| 赤城县| 襄垣县| 津南区| 修武县| 金湖县| 石家庄市| 江山市| 夏津县| 宣武区| 泾阳县| 石门县| 霍林郭勒市| 卫辉市| 定结县| 宜阳县| 泗水县| 库车县|