【发布时间】:2016-03-21 21:51:46
【问题描述】:
这里是 SQL 新手。我正在使用一个包含数据(longblob 类型)的表,它看起来像这样(导入到 phpMyAdmin):
这些文件(显然)使用 AES_Encrypt() 进行了 AES 加密。我知道密钥 ID 为 2332 的文件的密钥,我想在那个“blahb”(blob)上调用 AES_Decrypt()。为此,我写了一个程序:
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。
我只是问这个问题,因为我想知道: 我的存储过程是否正确?
因为如果是,我知道我认为正确的密钥实际上是错误的,或者我以错误的方式使用它。由于这是我第一次编写 SQL 过程,我不知道故障是在第一个原因还是第二个原因:/。
(服务器数据:“服务器版本:10.1.10-MariaDB - mariadb.org 二进制分发版”、“Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.19”)
编辑:在 cmets 中运行查询结果显然是一个 blob,但没有下载链接!然而,它确实大大简化了查询,我什至不必现在为此创建一个过程。
【问题讨论】:
-
运行这个有什么结果:
SELECT AES_Descrypt(blahb, 'PLACE_HERE_YOUR_KEY') from fyle where keeid = 2332; -
这里的屏幕截图确实让这个问题感到困惑。您可以将尝试的查询粘贴为纯文本吗?
-
@tadman 我都是通过 phpMyAdmin 的 Web-UI 执行此操作,复制粘贴我展示的过程,然后使用显示的输入参数执行该过程。 (这里绝对是 sql 新手)
-
@ConsiderMe:谢谢,单行查询看起来比我尝试的程序更好!帖子已更新。
-
@MaximilianGerhardt 我相信这回答了你的问题。正如您自己注意到的那样,您不需要为此执行程序。我没有使用 PHPMyAdmin,所以我无法回答您为什么看不到下载链接——也许它就是这样设计的。您还可以将返回的值转换为字符串。另见stackoverflow.com/questions/9762956/…