你能在mysql表中存储字节(fernet令牌)吗?python

w80xi6nr  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(274)

我正在尝试将这个fernet加密令牌插入到我数据库的表中。这是关于侦察兵的加密医疗信息

b'gAAAAABcIRmX3txIuOrw6FoSxy7I1vorA8hTTzMcXQGwch_jRBtWTsR9TwVyH125K0R6zG-BTvhv_SpZuW-Hs1WotaabBVj5tQ=='

使用此insert语句

sqlcommand = "INSERT INTO scoutinfo (scoutID, firstname,secondname,age,gender,ethnicity,address,postcode,medicalinfo,parentID,patrolID,userID) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
ScoutInput = (
    str(ScoutID), FName.get(), SName.get(), str(Age.get()), str(Gender.get()), str(Ethnicity.get()), Address.get(),
    Postcode.get(), EcryptMedInfo, str(ParentID[0]), str(PatrolID), str(UserID))
mycursor.execute(sqlcommand, ScoutInput)

在运行时,程序会执行,但是insert不会应用于表,不,我没有忘记 mydb.commit() . 我相信 bytes 是mysql不支持的数据类型,因此无法存储。在这种情况下,我将如何克服这一点,以便能够通过以下方式解密存储的令牌:

Ecy.decrypt(EcryptMedInfo)
b5lpy0ml

b5lpy0ml1#

如果有 b"" 你想把它转换成字符串。你应该使用 decode() 而不是 str() . 因为如果你使用 str() ,但如果您使用 decode() .

a = b"\x00\x00"
print((a,a.decode(),str(a)))
print(a == a.decode().encode())

# (b'\x00\x00', '\x00\x00', "b'\\x00\\x00'")

# True

当我使用 mysql.connector ,我不必自己把它们转换成字符串。

import mysql.connector as mysql
from base64 import b64encode, b64decode
conn = mysql.connect(user="kr",passwd="kr",db="kr")
cur = conn.cursor()

def go(stat,param=None):
    try:
        cur.execute(stat,param)
        conn.commit()
    except Exception as e:
        conn.rollback()
        print(e)
go("""
    CREATE TABLE test(
    col varchar(90) NOT NULL
)""")
something = b64encode(b"\x00\x00")
print(something,type(something)) 
go(stat="""INSERT INTO test (col) VALUES (%s)""", param=[something])

cur.execute("SELECT col from test")
result = cur.fetchone()[0]
print([b64decode(result)])

# b'AAA=' <class 'bytes'>

# [b'\x00\x00']

我认为bytes是mysql不支持的数据类型,因此无法存储。
mysql可以存储它。mysql字节数组存储

相关问题