python - 可以在 MySQL 表中存储字节(Fernet token )吗? Python

标签 python mysql python-3.x cryptography

我正在尝试将此 Fernet 加密 token 插入到我数据库中的表中。它是有关侦察兵的加密医疗信息

b'gAAAAABcIRmX3txIuOrw6FoSxy7I1vorA8hTTzMcXQGwch_jRBtWTsR9TwVyH125K0R6zG-BTvhv_SpZuW-Hs1WotaabBVj5tQ=='

通过使用此插入语句

    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 不支持的数据类型,因此无法存储。在这种情况下,我将如何克服这个问题,以便我能够通过以下方式解密存储的 token :

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

When i use mysql.connector, i don't have to transform them into string by myself.

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']

I believe that bytes is an unsupported datatype for MySQL and thus cannot be stored.

Mysql可以存储它。 Mysql byte array storage

关于python - 可以在 MySQL 表中存储字节(Fernet token )吗? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916397/

相关文章:

python - 从生成器懒惰地创建 dask 数据框

mysql - TRUNCATE 所有匹配名称模式的表

python-3.x - 基本 Flask SQLAlchemy 上下文问题

python - 如何使用对象/方法对的回调函数

database - python 3 : Connect to Remote Postgres Database with SSL

python - Keithley 2410 Pymeasure NotImplementedError : Please upgrade PyVISA to version 1. 8 或更高版本

python - 在 Python Anywhere 托管服务器中触发 OpenCV 脚本时找不到相机

python - 安装python包时如何让pip写入默认配置文件?

mysql - 如何在 4 个表上创建外连接以获取所有值加上 1 个字段的计数

mysql - 如何使 Mysql/Mariadb 脚本在 debian 启动时工作?