Python之AES加密遇到的一些坑以及解決方法

2021-10-04 03:57:33 字數 1935 閱讀 1650

報錯資訊:typeerror: object type cannot be passed to c code

之前用python寫aes/cbc/pkcs5padding加密, 寫好了1.0版本之後只是這樣的

寫成這樣之後, 我的電腦上執行沒問題, 就給別人了, 結果別人電腦上一執行就報錯

報錯資訊如下:

我也查了一下, 可能是我電腦上的加密庫的版本和他電腦上的版本不一樣, 他那個版本加密內容需要是位元組, 所以我就修改了一下, 修改之後如下, 修改地方紅色標出來了:

在加密時候, 把加密內容轉一下就好了

完整**如下:

import base64

import binascii

import re

from crypto.cipher import aes

class aescbc:

def __init__(self):

self.key = 'msunsoftalphaicd'.encode('utf-8') # 定義key值

self.mode = aes.mode_cbc

self.bs = 16 # block size

self.padding = lambda s: s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)

# 加密

def encrypt(self, text):

generator = aes.new(self.key, self.mode, self.key) # 這裡的key 和iv 一樣 ,可以按照自己的值定義

crypt = generator.encrypt(self.padding(text).encode('utf-8'))

crypted_str = base64.b64encode(crypt) #輸出base64

# crypted_str = binascii.b2a_hex(crypt) # 輸出hex

result = crypted_str.decode()

return result

# 解密

def decrypt(self, text):

generator = aes.new(self.key, self.mode, self.key)

text += (len(text) % 4) * '='

decrpyt_bytes = base64.b64decode(text) #輸出base64

# decrpyt_bytes = binascii.a2b_hex(text) # 輸出hex

meg = generator.decrypt(decrpyt_bytes)

# 去除解碼後的非法字元

try:

result = re.compile('[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\n\r\t]').sub('', meg.decode())

except exception:

result = '解碼失敗,請重試!'

return result

if __name__ == '__main__':

a = aescbc()

print(a.encrypt('1'))

print(a.decrypt(a.encrypt('1')))

AES加密中遇到的坑

專案背景 終端資料需要上傳到後台,為了安全,使用了aes加密 問題1 資料首先經過了protobuf進行格式,資料傳輸到後台無法解析 解決 二進位制資料直接進行aes加密後大多無法正常解析,於是在加密前有用base64轉化了一下。問題2 aes加密需要和後台同步的地方,否則加密後的密文不同 需要協商...

python實現AES的加密解密

了解aes aes advanced encryption standard 是一種對稱加密演算法,相較於des和3des演算法而言,aes演算法有著更高的速度和資源使用效率,安全級別也較之更高 公式 c e k,p 明文p,金鑰k,aes加密函式組成e,密文c。主要要了解以下幾點 aes金鑰的長度...

Python 的AES加密與解密

aes加密方式有五種 ecb,cbc,ctr,cfb,ofb python 在windows下使用aes時要安裝的是pycryptodome 模組pip install pycryptodome python 在linux下使用aes時要安裝的是pycrypto模組pip install pycry...