国产探花免费观看_亚洲丰满少妇自慰呻吟_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)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘阴县| 阿巴嘎旗| 开江县| 扎兰屯市| 宜州市| 松桃| 缙云县| 荣成市| 綦江县| 富蕴县| 安泽县| 临猗县| 宝清县| 仁布县| 府谷县| 调兵山市| 开平市| 施甸县| 仲巴县| 江永县| 白河县| 磐石市| 前郭尔| 梁平县| 凤山市| 大庆市| 明水县| 靖江市| 彭泽县| 白玉县| 奇台县| 盐源县| 唐河县| 长宁区| 任丘市| 石门县| 体育| 扶余县| 新民市| 嘉祥县| 凤庆县|