mysql aes_encrypt进入longtext列

是否可以将MySQL AES_ENCRYPT存储到LONGTEXT列中? 我知道我想使用varbinary或blob,但是我有一个表,其中存储了一堆随机的“ settings”,而settings_value列为longtext。 我去那里存储了一个“ smtp邮件密码”,但有点卡住了。 如果没有,我想我将通过php将其存储为十六进制字符串。 解: 我的查询是这样的:
INSERT INTO table (setting_value)VALUES(AES_ENCRYPT(\'password\', \'key\')) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)
正如您将在下面的评论中看到的那样,我尝试将列编码从utf8_unicode_ci更改为utf8_bin,但仍然失败。我更改为latin1_bin并成功了。 我切换回utf8_unicode_ci,并将查询更改为以下内容:
INSERT INTO table (setting_value)VALUES(HEX(AES_ENCRYPT(\'password\', \'key\'))) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)
之所以有效,是因为它将我的值变成了十六进制字符串。 我花了一点时间弄清楚如何正确地收回价值,因此出于文档目的:
$pass = SELECT AES_DECRYPT(BINARY(UNHEX(setting_value)), \'key\') as orig_text FROM table
echo $pass->orig_text
    
已邀请:
你试过了吗?设置测试用例非常容易,从我的角度来看,它可以很好地满足您的要求:
mysql> create table t (id int unsigned not null auto_increment primary key, str LONGTEXT);
Query OK, 0 rows affected (0.13 sec)

mysql> desc t;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| str   | longtext         | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.05 sec)

mysql> 
mysql> INSERT INTO t VALUES (1,AES_ENCRYPT(\'text\',\'password\'));
Query OK, 1 row affected (0.02 sec)

mysql> 
mysql> select id,str,AES_DECRYPT(str,\'password\') from t;
+----+-----------------------------+-----------------------------+
| id | str                         | AES_DECRYPT(str,\'password\') |
+----+-----------------------------+-----------------------------+
|  1 | ö½¨Ü·øÍJ/ª¼Tf€D            | text                        |
+----+-----------------------------+-----------------------------+
1 row in set (0.00 sec)
    
使用某种二进制列类型(例如BLOB而不是LONGTEXT)来存储AES_ENCRYPTed内容。     

要回复问题请先登录注册