Search code examples
pythonpycrypto

Python pycrypto module: why simplejson can't dumps encrypted string?


It shows UnicodeError: 'utf8' codec can't decode byte 0x82 in position 0: unexpected code byte

Here is code:

from Crypto.Cipher import AES
import simplejson as json

key = '0123456789abcdef'
mode = AES.MODE_CBC
encryptor = AES.new(key, mode)
text = '1010101010101010'

json.dumps(encryptor.encrypt(text))

How to avoid this error?

Thanks in advance!


Solution

  • The Cipher usually generates non-printable binary data. It is not possible for json to dump non-printable characters.

    One solution could be to use base64 encoding prior to json dump:

    from Crypto.Cipher import AES
    import simplejson as json
    import base64
    
    key = '0123456789abcdef'
    mode = AES.MODE_CBC
    encryptor = AES.new(key, mode)
    text = '1010101010101010'
    
    json.dumps(base64.encodestring(encryptor.encrypt(text)))
    

    Similarly, before decryption, you'll have to decode base64 as well.