2017-05-19 1 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 

を解読しようとするたびに、私は解読するためにこれを使用していますし、MSGはByteArrayのようで渡されている私は。 AES128暗号化のためのPython 3とpycryptodomeライブラリを使用しています、私は見ていますエラーは次のとおりです。。Python用Pyc​​ryptodomeライブラリを使用して、私はTypeError例外を取得しています:文字列はCコードに渡すことができるバイトのみ」私は

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でなければなりません

を2番目のスニップでは、してみてください直接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

TypeError例外:のみバイト文字列は、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) 
関連する問題

 関連する問題