簡體   English   中英

您可以在 MySQL 表中存儲字節(Fernet 令牌)嗎? Python

[英]Can you store bytes (Fernet token) in a MySQL table? python

我正在嘗試將此 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)

運行時,程序會執行,但是插入並未應用於表,不,我沒有忘記mydb.commit() 我相信bytes是 MySQL 不受支持的數據類型,因此無法存儲。 在這種情況下,我將如何克服這個問題,以便我能夠通過以下方式解密存儲的令牌:

Ecy.decrypt(EcryptMedInfo)

如果有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']

我相信字節是 MySQL 不受支持的數據類型,因此無法存儲。

Mysql 可以存儲它。 Mysql字節數組存儲

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM