国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL利用AES_ENCRYPT()與AES_DECRYPT()加解密的正確方法示例

2024-07-24 12:51:14
字體:
來源:轉載
供稿:網友

前言

最近在工作中遇到一個需求是這樣的:需要在使用AES_ENCRYPT()函數將明文加密,存儲在MySQL中,但是遇到了一些問題……下面就來詳細介紹下。

說將加密后的密文,解密取出來是NULL。

看了一下,她發過來的表結構:

再看了她通過AES_DECRYPT()函數加密了一個字符串,然后insert進去了,執行成功后,顯示了一個warning:
Query OK, 1 row affected, 1 warning (0.00 sec)

(沒有報錯而是warning,大概是sql_mode的緣故)

此時她忽略了這個warning,再通過AES_DECRYPT()解密后,發現取出來的明文為NULL。

再回看表結構,發現其字段屬性為“varchar” && 字符集是ut8,檢查warning為下:

mysql> show warnings;+---------+------+------------------------------------------------------------------------+| Level | Code | Message |+---------+------+------------------------------------------------------------------------+| Warning | 1366 | Incorrect string value: '/xE3f767/x12...' for column 'passwd' at row 1 |+---------+------+------------------------------------------------------------------------+1 row in set (0.00 sec)

查了一下文檔,看一下這兩個函數的使用:

-- 將'hello world'加密,密鑰為'key',加密后的串存在@pass中mysql> SET @pass=AES_ENCRYPT('hello world', 'key'); Query OK, 0 rows affected (0.00 sec)-- 看一下加密后串的長度(都為2的整數次方)mysql> SELECT CHAR_LENGTH(@pass);+--------------------+| CHAR_LENGTH(@pass) |+--------------------+| 16 |+--------------------+1 row in set (0.00 sec)-- 使用AES_DECRYPT()解密mysql> SELECT AES_DECRYPT(@pass, 'key');+---------------------------+| AES_DECRYPT(@pass, 'key') |+---------------------------+| hello world |+---------------------------+1 row in set (0.00 sec)

那么到底該如何存呢?

方法①:

將字段屬性設置為varbinary/binary/四個blob類型,等二進制字段屬性。

創建三個字段,屬性分別為varbinary、binary、blob。

并將'明文1','text2','明文_text3'加密,密鑰為key,存入表中。

最后取出。

mysql> CREATE TABLE t_passwd (pass1 varbinary(16), pass2 binary(16), pass3 blob);Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO t_passwd VALUES (AES_ENCRYPT('明文1', 'key'), AES_ENCRYPT('text2', 'key'), AES_ENCRYPT('明文_text3', 'key')); Query OK, 1 row affected (0.01 sec)mysql> SELECT AES_DECRYPT(pass1, 'key'), AES_DECRYPT(pass2, 'key'), AES_DECRYPT(pass3, 'key') FROM t_passwd;+---------------------------+---------------------------+---------------------------+| AES_DECRYPT(pass1, 'key') | AES_DECRYPT(pass2, 'key') | AES_DECRYPT(pass3, 'key') |+---------------------------+---------------------------+---------------------------+| 明文1 | text2 | 明文_text3 |+---------------------------+---------------------------+---------------------------+1 row in set (0.00 sec)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 根河市| 灌南县| 乡宁县| 林芝县| 昆山市| 德化县| 永和县| 高州市| 桦甸市| 新密市| 庆城县| 平定县| 林口县| 富锦市| 巴彦县| 东丰县| 巴林右旗| 五台县| 绿春县| 阿合奇县| 波密县| 旌德县| 宣威市| 通许县| 靖江市| 大埔县| 黔东| 西乌珠穆沁旗| 丽水市| 太湖县| 闸北区| 剑川县| 宜宾市| 昂仁县| 甘肃省| 烟台市| 澄迈县| 吉木萨尔县| 碌曲县| 徐水县| 青冈县|