日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python2.x和3.x为什么不兼容_Python中使用AES算法(解决Python2.x和3.x下运行不兼容问题)...

發布時間:2025/3/20 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python2.x和3.x为什么不兼容_Python中使用AES算法(解决Python2.x和3.x下运行不兼容问题)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩年前使用python時,碰到2.x下AES加密解密算法代碼無法在3.x下順利運行,花點時間解決了兼容問題,在2.7、3.6、3.7下運行良好。

Linux系統安裝依賴庫比較簡單,Windows下稍嫌繁瑣,裝完必須的庫也可以正常運行。

代碼整理如下:

# -*- coding: utf-8 -*-

import base64

import sys

from Crypto import Random

from Crypto.Cipher import AES

# Author: areful

# Date: 2017-07-06

class AESCipher:

def __init__(self, key, iv=Random.new().read(AES.block_size)):

self.key = key

self.iv = iv

self.mode = AES.MODE_CBC

if sys.version > '3':

self.PY3 = True

else:

self.PY3 = False

def encrypt(self, text):

if self.PY3:

return self.encrypt36(text)

else:

return self.encrypt27(text)

def encrypt27(self, text):

cipher = AES.new(self.key, AES.MODE_CBC, self.iv)

bs = AES.block_size

text_length = len(text)

amount_to_pad = bs - (text_length % bs)

if amount_to_pad == 0:

amount_to_pad = bs

pad = chr(amount_to_pad)

text1 = text + pad * amount_to_pad

cipher_text = cipher.encrypt(text1)

return base64.b64encode(cipher_text)

def encrypt36(self, text):

cipher = AES.new(self.key, AES.MODE_CBC, self.iv)

bs = AES.block_size

text_length = len(text.encode('utf-8'))

amount_to_pad = bs - (text_length % bs)

if amount_to_pad == 0:

amount_to_pad = bs

pad = chr(amount_to_pad)

text1 = text + pad * amount_to_pad

cipher_text = cipher.encrypt(text1)

encrypted_str = str(base64.b64encode(cipher_text), encoding='utf-8')

return encrypted_str

def decrypt(self, text):

import base64

base_text = base64.b64decode(text)

cipher = AES.new(self.key, self.mode, self.iv)

plain_text = cipher.decrypt(base_text).decode('utf-8')

pad = ord(plain_text[-1])

ne = plain_text[:-pad]

return ne

@staticmethod

def pad(s):

bs = AES.block_size

return s + (bs - len(s) % bs) * chr(bs - len(s) % bs)

@staticmethod

def unpad(s):

return s[0:-ord(s[-1])]

@staticmethod

def __pad(text):

text_length = len(text)

amount_to_pad = AES.block_size - (text_length % AES.block_size)

if amount_to_pad == 0:

amount_to_pad = AES.block_size

pad = chr(amount_to_pad)

return text + pad * amount_to_pad

@staticmethod

def __unpad(text):

pad = ord(text[-1])

return text[:-pad]

@staticmethod

def test(key, iv, text):

cipher = AESCipher(key, iv)

encrypted_msg = cipher.encrypt(text)

print(encrypted_msg)

msg = cipher.decrypt(encrypted_msg)

print(msg)

if __name__ == '__main__':

AESCipher.test('ABCDEFGHICKLMNOP',

bytes(bytearray(b'x01x02x03x04x05x06x07x08x41x42x43x44x45x46x47x48')),

'areful.測試文本')

總結

以上是生活随笔為你收集整理的python2.x和3.x为什么不兼容_Python中使用AES算法(解决Python2.x和3.x下运行不兼容问题)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。