这里是 SQL 新手。我正在使用一个包含数据(longblob
类型)的表,它看起来像这样(导入到 phpMyAdmin 中):
这些文件(显然)使用 AES_Encrypt()
进行 AES 加密。 。我知道 key ID 为 2332 的文件的 key ,并且我想调用 AES_Decrypt()
在那“blahb”( Blob )上。为此,我写了一个程序:
BEGIN
DECLARE dat longblob;
SELECT blahb into dat from fyle where keeid = p_id;
SELECT AES_Decrypt(dat, p_key) into p_out;
END
但是,当我使用 keyid 2332 和已知密码调用它时,它只返回 NULL。
我问这个问题只是因为我想知道: 我的存储过程正确吗?
因为如果是的话,我知道我认为正确的 key 实际上是错误的,或者我以错误的方式使用它。因为这是我第一次编写 SQL 过程,所以我不知道错误是第一个原因还是第二个原因:/.
(服务器数据:“服务器版本:10.1.10-MariaDB - mariadb.org 二进制发行版”,“Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.19”)
编辑:在评论中运行查询显然会得到一个 blob 结果,但没有下载链接!然而,它确实极大地简化了查询,我现在甚至不必为此创建一个过程。
最佳答案
您不需要任何过程来获取解密的 blob。改为在 select 语句中调用函数:
SELECT AES_Decrypt(blahb, 'PLACE_HERE_YOUR_KEY') from fyle where keeid = 2332
在 PHPMyAdmin 中将 blob
字段显示为 text
非常简单,并且已在 this question 中进行了介绍。 .
关于mysql - AES_Decrypt() 返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142311/