Python.Вывод crypto.cipher.blowfish и .AES не может быть переведен ни в юникод (как хочет sqlite), ни в hex - PullRequest
0 голосов
/ 20 августа 2010

Хорошо, я совершенно новичок в Python, поэтому я решил сделать простое приложение. Вот моя функция шифрования:

from Crypto.Cipher import AES
def encPass(login, password):
    keyPhr=os.environ['HOME']+login
    hashObj = hashlib.md5()
    hashObj.update(keyPhr)
    keyPhr=hashObj.hexdigest()
    keyObj=AES.new(keyPhr)
    encPwd=keyObj.encrypt(password+'pssd')
    return encPwd

Как видите, он получает логин и пароль и шифрует пароль с привязкой к ПК.

Проблема в том, что когда я пытаюсь передать encPws в sqlite3 и вставить его в таблицу, он говорит:

sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

Если я попытаюсь поместить encPwd в unicode () или hex ():

TypeError: hex() argument can't be converted to hex
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 0: unexpected code byte

Я думаю, это потому, что я новичок, но что мне делать? То же самое с Blowfish вместо AES

1 Ответ

1 голос
/ 20 августа 2010

Вы можете использовать buffer и вставить encPwd в качестве большого двоичного объекта.

Или вы можете использовать что-то вроде base64 для преобразования вашего encPwd в ASCII (который являетсяподмножество UTF8), поэтому вы можете вставить его в виде строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...