首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL \ AES加密()/解密()

MYSQL \ AES加密()/解密()
EN

Stack Overflow用户
提问于 2015-08-06 08:07:17
回答 2查看 7.4K关注 0票数 3

我需要用一种可解密的方式加密一个字符串。最好的方法是通过一个给定的密码来获得一些保护。这里的安全没那么重要。

到目前为止,我选择了AES_ENCRYPT(),但无法解密它。

加密: SELECT AES_ENCRYPT('test', 'test')

输出: 87bd903885943be48a4e68ab63b0ec6a

解密: SELECT AES_DECRYPT('87bd903885943be48a4e68ab63b0ec6a', 'test')

输出: NULL

简单的问题:为什么我不能破译它?在网上找不到任何关于它的东西。

如果解决方案变得太大(我希望它很简单),我也可以使用另一种加密方法。

非常感谢!

MySQL-Client-版本: 5.5.41

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 08:14:01

您需要首先将十六进制字符串转换为二进制数据:

代码语言:javascript
复制
SELECT AES_DECRYPT(UNHEX('87bd903885943be48a4e68ab63b0ec6a'), 'test') FROM DUAL;

实际上,我很惊讶您最初的SELECT语句首先返回了一个十六进制字符串。我得到的是:

代码语言:javascript
复制
mysql> SELECT AES_ENCRYPT('test','test') FROM DUAL;
+----------------------------+
| AES_ENCRYPT('test','test') |
+----------------------------+
| ???8??;?Nh?c??j                     |
+----------------------------+
1 row in set (0.02 sec)

只有在显式调用HEX()时才能得到十六进制字符串:

代码语言:javascript
复制
mysql> SELECT HEX(AES_ENCRYPT('test','test')) FROM DUAL;
+----------------------------------+
| HEX(AES_ENCRYPT('test','test'))  |
+----------------------------------+
| 87BD903885943BE48A4E68AB63B0EC6A |
+----------------------------------+
1 row in set (0.00 sec)

(这在MySQL版本5.6.22中)

票数 2
EN

Stack Overflow用户

发布于 2015-08-06 09:12:26

在MySql工作台中,在Edit/Preferences/Sql /Sql执行下面有一个设置,复选框为[X] Treat BINARY/VARBINARY as nonbinary character string

然后重新启动工作台。

代码语言:javascript
复制
SELECT HEX(AES_ENCRYPT('secret message','myKey')) into @a FROM DUAL;
select @a; -- 'F5CF7120FF800ECEB4663785EFC19340'

SELECT AES_DECRYPT(UNHEX('F5CF7120FF800ECEB4663785EFC19340'), 'myKey') FROM DUAL;
-- secret message  (shows it fine)

SELECT AES_DECRYPT(unhex(@a), 'wrongKey') from dual;
-- NULL  (at least it is a tip-off that it failed)
SELECT AES_DECRYPT(unhex(@a), 'myKey') from dual;
-- BLOB

现在右键单击BLOB,“打开查看器中的值”,在二进制和文本选项卡之间切换,请参见“秘密消息”

有点痛苦,尽管我在回答上面提到过,但是哦,好吧。当然,它在mysql客户机中工作得很好,而不是Workbench。

我只是想和大家分享一下,感受一下你在other thought link上的痛苦。特定于客户/版本的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31850178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档