【问题标题】:AES_Decrypt() returning null valueAES_Decrypt() 返回空值
【发布时间】: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

并像这样嵌入 intp phpMyAdmin:

但是,当我使用 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/…

标签: mysql sql aes mariadb


【解决方案1】:

您不需要任何过程来获取解密的 blob。改为在 select 语句中调用函数:

SELECT AES_Descrypt(blahb, 'PLACE_HERE_YOUR_KEY') from fyle where keeid = 2332

在 PHPMyAdmin 中将 blob 字段显示为 text 非常简单,并且已经在 this question 中介绍过。

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2021-12-21
    • 2015-11-07
    • 2020-05-20
    • 2020-11-08
    相关资源
    最近更新 更多