報錯資訊: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...