2017-05-19 9 views
0
def aes128_decrypt(self, msg): 
    iv = os.urandom(16) 
    aes_obj = AES.new(self.key, AES.MODE_CBC, iv) 
    decrypted_msg = aes_obj.decrypt(msg) 
    return decrypted_msg 

의 암호를 해독하려고 할 때마다 나는 . 파이썬 3 및 AES128 암호화를 위해 pycryptodome 라이브러리를 사용하고 내가보고하고 오류는 다음과 같습니다.가 나는 형식 오류를 얻고있다 :. 만 바이트 문자열을 C 코드로 전달 될 수있다 "나는이 해독하고 MSG가 된 ByteArray로 전달되고 사용하고

msg = bytearray(b'M\xb1\xbfw\xf4o\x15\xff\xda{u\xba)\xcd\x9fu\x80\xb2\x0c*s\x17%6\xfeA\xb84\xab\x89\xff\x16A\xb8') 

def expect_byte_string(data): 
    if not byte_string(data) and not isinstance(data, Array): 
     raise TypeError("Only byte strings can be passed to C code") 
     TypeError: Only byte strings can be passed to C code 

답변

0

해독하는 메시지가 bytes 객체가 아닌 bytearray해야 두 번째 잘린에서

시도 msg을 직접 정의하려면 등 :

msg = b'M\xb1\xbfw\xf4o\x15\xff\xda{u\xba)\xcd\x9fu\x80\xb2\x0c*s\x17%6\xfeA\xb84\xab\x89\xff\x16A\xb8' 
0

오류 : 전용 바이트 문자열은 C 코드로 전달 될 수

use A prefix of 'b' or 'B' 

또는

bytes(s, encoding = "utf8") # str to bytes 

예 :

# coding: utf-8 
from Crypto.Cipher import AES 
import base64 
pad_it = lambda s: bytes(s+(16 - len(s)%16)*PADDING, encoding='utf8') 
key = b'1234567812345678' 
iv = b'1234567812345678' 
source = 'Test String' 
generator = AES.new(key, AES.MODE_CBC, iv) 
crypt = generator.encrypt(pad_it(source)) 
cryptedStr = base64.b64encode(crypt)