亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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í)候可能存在問題
    # 所以這里統(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)文章

  • 詳解Python 4.0 預(yù)計(jì)推出的新功能

    詳解Python 4.0 預(yù)計(jì)推出的新功能

    這篇文章主要介紹了詳解Python 4.0 預(yù)計(jì)推出的新功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-07-07
  • python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例

    python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例

    這篇文章主要介紹了python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 老生常談Python中的Pickle庫(kù)

    老生常談Python中的Pickle庫(kù)

    pickle是python語(yǔ)言的一個(gè)標(biāo)準(zhǔn)模塊,安裝python后已包含pickle庫(kù),不需要單獨(dú)再安裝。這篇文章主要介紹了Python中的Pickle庫(kù),需要的朋友可以參考下
    2022-01-01
  • python 調(diào)用釘釘機(jī)器人的方法

    python 調(diào)用釘釘機(jī)器人的方法

    今天小編就為大家分享一篇python 調(diào)用釘釘機(jī)器人的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python常用的數(shù)據(jù)清洗方法詳解

    Python常用的數(shù)據(jù)清洗方法詳解

    這篇文章主要介紹了Python常用的數(shù)據(jù)清洗方法,在數(shù)據(jù)處理的過程中,一般都需要進(jìn)行數(shù)據(jù)的清洗工作,如數(shù)據(jù)集是否存在重復(fù)、是否存在缺失、數(shù)據(jù)是否具有完整性和一致性、數(shù)據(jù)中是否存在異常值等,需要的朋友可以參考下
    2023-07-07
  • Python面向?qū)ο缶幊袒A(chǔ)解析(二)

    Python面向?qū)ο缶幊袒A(chǔ)解析(二)

    這篇文章主要介紹了Python面向?qū)ο缶幊袒A(chǔ)解析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • python boto和boto3操作bucket的示例

    python boto和boto3操作bucket的示例

    這篇文章主要介紹了python boto和boto3操作bucket的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容

    python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容

    這篇文章主要為大家介紹了python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容的實(shí)現(xiàn),有需要的的朋友可以借鑒參考下,希望能有所幫助祝大家多多進(jìn)步
    2021-11-11
  • 圖解Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別

    圖解Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別

    這篇文章主要介紹了Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別,淺拷貝和深拷貝想必大家在學(xué)習(xí)中遇到很多次,這也是面試中常常被問到的問題,本文就帶你詳細(xì)了解一下
    2023-05-05
  • python進(jìn)行兩個(gè)表格對(duì)比的方法

    python進(jìn)行兩個(gè)表格對(duì)比的方法

    今天小編就為大家分享一篇python進(jìn)行兩個(gè)表格對(duì)比的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評(píng)論