尝试将 rsa 密钥(元组)插入 sql 数据库时出错
Error while trying to insert rsa key (tuple) into sql database
我正在学习 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 生成密钥,它们生成为元组。例如元组将是这样的:
PublicKey(7993225774562669856453147392958346571937702133919317490212017912216372852796080413531673713173968180340315460310318908937895213458133041784535151317298739, 65537)
我查看了 rsa 和 rsa.newkeys() dpes return 元组的文档,但我收到错误消息说它是错误的数据类型。
看看您的 RSA 密钥 - 它可能是十六进制的(即有数字和字母),所以 int 将不起作用。 Int 仅用于数字。
我建议使用文本或 blob 作为类型。
pubKey 和 privKey 是 类(rsa.key.PublicKey 和 rsa.key.PrivateKey)
的实例
从实例中您可以将两个值都作为 int:
pubKey.n
- from your example it's 7993225774562669856453147392958346571937702133919317490212017912216372852796080413531673713173968180340315460310318908937895213458133041784535151317298739
pubKey.e
- 是 65537
如果您只需要密钥,请将 int 保存到数据库中:
db.execute('create table user (username text, password text, pubKey int, privKey int)')
...
db.execute('insert into user (username, password, pubKey, privKey) values (?, ?, ?, ?)', (username, password, pubKey.n, privKey.n))
如果需要整个字符串,请转换为 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)))
我正在学习 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 生成密钥,它们生成为元组。例如元组将是这样的:
PublicKey(7993225774562669856453147392958346571937702133919317490212017912216372852796080413531673713173968180340315460310318908937895213458133041784535151317298739, 65537)
我查看了 rsa 和 rsa.newkeys() dpes return 元组的文档,但我收到错误消息说它是错误的数据类型。
看看您的 RSA 密钥 - 它可能是十六进制的(即有数字和字母),所以 int 将不起作用。 Int 仅用于数字。
我建议使用文本或 blob 作为类型。
pubKey 和 privKey 是 类(rsa.key.PublicKey 和 rsa.key.PrivateKey)
的实例从实例中您可以将两个值都作为 int:
pubKey.n
- from your example it's 7993225774562669856453147392958346571937702133919317490212017912216372852796080413531673713173968180340315460310318908937895213458133041784535151317298739
pubKey.e
- 是 65537
如果您只需要密钥,请将 int 保存到数据库中:
db.execute('create table user (username text, password text, pubKey int, privKey int)')
...
db.execute('insert into user (username, password, pubKey, privKey) values (?, ?, ?, ?)', (username, password, pubKey.n, privKey.n))
如果需要整个字符串,请转换为 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)))