我使用mysql和做AES_ENCRPYT
函數來存儲一些機密數據。所以aes加密數據存儲字段是varchar
但是當我插入一些數據並檢查數據庫時,它似乎像一些wiered字符i³£ÓXñÒOýpŠ
..但是,當我改變了數據類型顯示爲二進制字符串像69b3a3d358f1d24ffd708a0cafdbdbd8
。我現在用PHP和MYSQLvarbinary或varchar保存AES加密數據
所以我的問題是
哪些數據類型必須用於存儲的AES加密的數據VARBINARY? varchar
或varbinary
。爲什麼?
另外如何做一個256字節的aes加密。
我發現了一些引用here指出
爲什麼我們用VARBINARY數據類型,而不是VARCHAR:
因爲AES_ENCRYPT()
加密的字符串,並返回一個二進制字符串。
我總是使用var binary,但char也會起作用。數據將相同 – exussum
使用二進制類型。字符類型受到字符集轉換的自動化處理,並且你會得到一團糟。例如,假設表格中的數據是utf8,但客戶端編碼是latin1,所以MySql會自動將每個'é'字符(用拉丁字母E9表示)轉換爲utf8中的c3 + a9字節,並將這兩個字節存儲在表格中。然後想象另一個不支持'é'字符的編碼不是utf8和latin1的客戶端正在嘗試解密這個字符串 - 並且會弄得一團糟。 – krokodilko