Ошибка при попытке вставить ключ rsa (кортеж) в базу данных sql - PullRequest
0 голосов
/ 11 февраля 2019

Я изучаю sqlite3, и я попытался вставить ключ rsa в один из моих столбцов, которые я сделал, но я получаю эту ошибку:

sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.

Вот мой код:

import sqlite3, rsa

db = sqlite3.connect('database.db')
db.execute('drop table if exists user')
db.execute('create table user (username text, password text, pubKey tuple, 
privKey tuple)')

username = input("Input Username: ")
password = input("Input Password: ")
confirm = input("Confirm Password: ")
(pubKey, privKey) = rsa.newkeys(512)

if password == confirm:
    db.execute('insert into user (username, password, pubKey, privKey) values (?, ?, ?, ?)', (username, password, pubKey, privKey))
    db.commit()
else:
    quit()

Я использую rsa.newkeys для генерации ключей, и они генерируются как кортежи.Например, кортеж будет что-то вдоль линий:

1010 * PublicKey (7993225774562669856453147392958346571937702133919317490212017912216372852796080413531673713173968180340315460310318908937895213458133041784535151317298739, 65537)

Я посмотрел на документацию для РКА и rsa.newkeys () dpes возвращает кортеж, но я получаюошибка, говорящая, что это неправильный тип данных.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

pubKey и privKey являются экземплярами классов (rsa.key.PublicKey и rsa.key.PrivateKey)

Из экземпляра вы можете взять оба значения как int:

pubKey.n- из вашего примера это 799322577456266985645314739295834657193770213391931749021201791221637285279608041353167371317396818034031546031031890893789521345813304178453515882134581330417845351588213455 1330417845351515817845351588213 455всю строку, преобразовать в str и сохранить как текст:

db.execute('create table user (username text, password text, pubKey text, privKey text)')
...
db.execute('insert into user (username, password, pubKey, privKey) values (?, ?, ?, ?)', (username, password, str(pubKey), str(privKey)))
0 голосов
/ 11 февраля 2019

Посмотрите на свой ключ RSA - он, вероятно, шестнадцатеричный (то есть есть цифры И буквы), поэтому int не будет работать.Int только для чисел.

Я бы предложил использовать для текста либо текст, либо блоб.

...