我正在使用 mysql-connector,我想將一些數據存儲在 MySQL 數據庫中。我使用 PyCrypto 應用 EAS 加密,結果產生如下所示的字節字符串:encrypted_data = b'\xd5\x9e\xea \x8d\xc4\xa6P\x93>\xda\x045\xd6\xfa8'在我的數據庫中存儲的最有效方式是什么encrypted_data?一個想法是將 unicode 字節轉換為十六進制并將其存儲為VARCHAR. 雖然在那種情況下我需要兩倍的存儲空間。另一個想法是在 MySQL 中對其進行加密。雖然因為我也在 python 中使用其他加密和哈希函數,我更愿意在 python 中完成所有加密工作,這樣代碼更有條理和可讀性。
1 回答

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
無論您是使用 Python 還是 MySQL 對數據進行加密,加密后的數據都應該存儲在二進制列中。
許多加密和壓縮函數返回字符串,其結果可能包含任意字節值。如果要存儲這些結果,請使用具有 VARBINARY 或 BLOB 二進制字符串數據類型的列。這將避免因刪除尾隨空格或更改數據值而導致的字符集轉換的潛在問題,例如在使用非二進制字符串數據類型(CHAR、VARCHAR、TEXT)時可能發生的問題。
少量加密數據應存儲為varbinary
,這類似于varchar
.?大量加密數據應存儲blob
為text
.
MySQL 有加密和解密功能,但你僅限于 AES。如果您熟悉 Python 中的加密,請使用 Python。請務必將其加密為二進制數據,而不是十六進制,并將其存儲在二進制列中。這將是最有效和最安全的。
添加回答
舉報
0/150
提交
取消