Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2009 19:22:52

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite и AES

Всем доброго Времени суток. Собственно трабл… записать текст шифрованный алгоритмом 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. Надо сказать, что шифрование проходит нормально. Пробывал выводить текст на терминал. Без шифрования текст добавляется в базу корректно. Подскажите плиз :) осталось с бубном попробывать станцевать :)
Всем за ранее спасибо!



Офлайн

#2 Ноя. 24, 2009 20:12:11

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlite и AES

Какие-то управляющие символы появились в результате шифрования, я думаю, которые не может база переварить.

Офлайн

#3 Ноя. 24, 2009 20:28:13

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite и AES

хм…. а как бы Вы поступили в такой ситуации?



Офлайн

#4 Ноя. 24, 2009 21:02:13

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlite и AES

Попробовал, для начала, передавать параметры через (?,?,?), а не использовал прямую конкатенацию.
Ну и, как вариант, попробовал отдебажить этот кусок - printo'м или с помощью pdb - узнать что там на самом деле получается, в результирующем запросе.

Офлайн

#5 Ноя. 25, 2009 07:55:13

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite и AES

спс :) поработаю



Офлайн

#6 Ноя. 25, 2009 08:41:33

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite и 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') ) ) + ")")
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… можно как нибудь строку привести к этому типу? или может я чего-то не понимаю ))) подскажите плиз



Офлайн

#7 Ноя. 25, 2009 10:37:54

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite и AES

спс ) разобрался. тему можно закрывать



Офлайн

#8 Ноя. 25, 2009 18:19:29

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

sqlite и AES

kzoi_py
спс ) разобрался. тему можно закрывать
так скажи как, для тех кто столкнется с этой же проблемой…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version