Sql Django和带有数据库ENCRYPTBYKEY功能的字段加密
我将Django用于捕获一些敏感数据的应用程序,我需要在数据库中对这些数据进行加密。我必须使用数据库加密 因此,为了保存字段,我使用:Sql Django和带有数据库ENCRYPTBYKEY功能的字段加密,sql,django,encryption,Sql,Django,Encryption,我将Django用于捕获一些敏感数据的应用程序,我需要在数据库中对这些数据进行加密。我必须使用数据库加密 因此,为了保存字段,我使用: query = """ OPEN SYMMETRIC KEY MyKey DECRYPTION BY CERTIFICATE MyCertificate UPDATE mytable SET name = ENCRYPTBYKEY(KEY_GUID('MyKey'), %s) WHERE id = %s CLO
query = """
OPEN SYMMETRIC KEY MyKey
DECRYPTION BY CERTIFICATE MyCertificate
UPDATE mytable
SET name = ENCRYPTBYKEY(KEY_GUID('MyKey'), %s)
WHERE id = %s
CLOSE SYMMETRIC KEY MyKey
"""
args = ["Test Name", data.id]
cursor = connection.cursor()
cursor.execute(query, args)
transaction.commit_unless_managed()
该字段保存在数据库中,但当我取消对base中保存的数据的加密时,我会得到0x540065007300740020004E0061006D006500
,我应该从中得到0x54657374204E616D65
有人知道为什么我的字符串中插入了0x00字节吗
我尝试使用connection.querys[-1]获取查询字符串,并直接在数据库中运行它,当我取消对其进行加密时,数据是干净的。显然,SQL Server正在隐式地进行某种字符串转换 我通过在加密之前将数据强制转换为varchar解决了问题:
query = """
OPEN SYMMETRIC KEY MyKey
DECRYPTION BY CERTIFICATE MyCertificate
UPDATE mytable
SET name = ENCRYPTBYKEY(KEY_GUID('MyKey'), CAST(%s AS VARCHAR(1023)))
WHERE id = %s
CLOSE SYMMETRIC KEY MyKey
"""
args = ["Test Name", data.id]
cursor = connection.cursor()
cursor.execute(query, args)
transaction.commit_unless_managed()
显然,SQLServer正在隐式地进行某种字符串转换 我通过在加密之前将数据强制转换为varchar解决了问题:
query = """
OPEN SYMMETRIC KEY MyKey
DECRYPTION BY CERTIFICATE MyCertificate
UPDATE mytable
SET name = ENCRYPTBYKEY(KEY_GUID('MyKey'), CAST(%s AS VARCHAR(1023)))
WHERE id = %s
CLOSE SYMMETRIC KEY MyKey
"""
args = ["Test Name", data.id]
cursor = connection.cursor()
cursor.execute(query, args)
transaction.commit_unless_managed()