【问题标题】:MySQL AES_Decrypt not workingMySQL AES_Decrypt 不工作
【发布时间】:2017-09-26 12:05:33
【问题描述】:

我一直在尝试许多不同的变体来让 AES_Decrypt 正常工作。我从字段类型 VARBINARY 开始,然后尝试了 BLOB,但仍然没有运气,一直返回 NULL。最终我尝试了这个:

SELECT AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') as test

这在技术上应该返回 blah blah blah,但它却返回了

 626c616820626c616820626c6168

所以不确定发生了什么或我做错了什么。

我已插入加密数据如下:

INSERT INTO private (short_name, mobile, name) 
VALUES (
  'AS1', 
  AES_ENCRYPT('0111222333','1234'), 
  AES_ENCRYPT('My Name','1234')
)

然后我尝试像这样解密它:

SELECT AES_DECRYPT('mobile', '1234') AS mobile FROM private

它似乎不起作用。按照网上的说明进行了很多操作,但还是没有成功。

有什么想法吗?

【问题讨论】:

    标签: mysql aes


    【解决方案1】:

    所以看来我需要使用 CAST,除非使用 mysql 命令行客户端。

    所以这样做似乎有效:

    SELECT CAST(AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') AS CHAR (150))
    

    【讨论】:

      【解决方案2】:
      SELECT AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') as test
      

      正在返回二进制字符串作为输出。如果您将其转换为字符串,那么它将是废话。您可以使用在线十六进制到二进制转换器来验证它。您必须在 GUI 工具中将其设置为文本。

      【讨论】:

      • 我尝试使用在线二进制转换器转换字符串,但都报错。是否不应该有一种方法可以将其作为文本返回而不必单独转换它
      • 好吧,看来我需要这样写:SELECT CAST(AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') AS CHAR (150))
      • 选择 UNHEX('626c616820626c616820626c6168');它会告诉你等等等等。
      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2018-09-26
      • 1970-01-01
      相关资源
      最近更新 更多