Найти - Пользователи
Полная версия: sqlite и AES
Начало » Python для новичков » sqlite и AES
1
kzoi_py
Всем доброго Времени суток. Собственно трабл… записать текст шифрованный алгоритмом AES в базу. Вот кусочек кода шифрования и записи
obj_aes = AES.new(h.hexdigest(), AES.MODE_CBC)

for i in range(0, len(tmp)):
if len( tmp[i][0].decode('cp1251') ) % 16 <> 0:
while len(tmp[i][0].decode('cp1251')) % 16 <> 0:
tmp[i][0] += ' '
c.execute("insert into termin values (" + str(i) + ",'" + obj_aes.encrypt(tmp[i][0] ) + "'," + str( stack.index( tmp[i][2].decode('cp1251') ) ) + ")")
на последней строчке выдаётся ошибка
sqlite3:OperationalError: unrecognized “

AES получаю модулем PyCrypto. Надо сказать, что шифрование проходит нормально. Пробывал выводить текст на терминал. Без шифрования текст добавляется в базу корректно. Подскажите плиз :) осталось с бубном попробывать станцевать :)
Всем за ранее спасибо!
Ferroman
Какие-то управляющие символы появились в результате шифрования, я думаю, которые не может база переварить.
kzoi_py
хм…. а как бы Вы поступили в такой ситуации?
Ferroman
Попробовал, для начала, передавать параметры через (?,?,?), а не использовал прямую конкатенацию.
Ну и, как вариант, попробовал отдебажить этот кусок - printo'м или с помощью pdb - узнать что там на самом деле получается, в результирующем запросе.
kzoi_py
спс :) поработаю
kzoi_py
Поработал в общем… код принял вид
obj_aes = AES.new(h.hexdigest(), AES.MODE_CBC)

for i in range(0, len(tmp)):
if len( tmp[i][0].decode('cp1251') ) % 16 <> 0:
while len(tmp[i][0].decode('cp1251')) % 16 <> 0:
tmp[i][0] += ' '
#c.execute("insert into termin values (" + str(i) + ",'" + obj_aes.encrypt(tmp[i][0] ) + "'," + str( stack.index( tmp[i][2].decode('cp1251') ) ) + ")")
c.execute("insert into termin values(?, ?, ?)", [str(i), obj_aes.encrypt(tmp[i][0] ), str( stack.index( tmp[i][2].decode('cp1251') ) ) ] )
c.execute("select * from termin")
Теперь ошибка идёт на стадии выполнения. В отладчике появляется
sqlite3:OperationalError: Could not decode to UTF-8 column ‘tname’ with text ‘абра кадабра аес’
Изначально тип поля tname был text. Потом я поменял на blob. Ведь по логике данные двоичные… хоть и в виде строки. В документации указано, что для blob соответствует питоновский buffer… можно как нибудь строку привести к этому типу? или может я чего-то не понимаю ))) подскажите плиз
kzoi_py
спс ) разобрался. тему можно закрывать
igor.kaist
kzoi_py
спс ) разобрался. тему можно закрывать
так скажи как, для тех кто столкнется с этой же проблемой…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB