【问题标题】:AES_ENCRYPT and AES_DECRYPT functions in MYSQLMYSQL 中的 AES_ENCRYPT 和 AES_DECRYPT 函数
【发布时间】:2020-04-01 19:22:36
【问题描述】:

我在 MYSQL 8.0.19 中尝试了函数 AES_ENCRYPT 和 AES_DECRYPT。 当我运行SELECT AES_ENCRYPT('foo','test'); 时,我得到0x429292F7734FFE002C4E5B11239FD3A4,但是当我运行SELECT AES_DECRYPT('0x429292F7734FFE002C4E5B11239FD3A4','test'); 时,我得到0x(而不是'foo')。 为什么 AES_DECRYPT 函数不起作用? 谢谢你们。亲切的问候。数控

【问题讨论】:

    标签: mysql aes


    【解决方案1】:

    aes_decrypt() 的输入需要是二进制字符串而不是字符串。由于aes_decrypt() 的返回值也是一个二进制字符串,您可能需要将其转换为字符串。

    要么不引用输入。

    SELECT cast(aes_decrypt(0x429292F7734FFE002C4E5B11239FD3A4, 'test') AS char);
    

    或删除前导 '0x' 前缀和 x

    SELECT cast(aes_decrypt(x'429292F7734FFE002C4E5B11239FD3A4', 'test') AS char);
    

    或删除(字符)字符串上的前导'0x'unhex()

    SELECT cast(aes_decrypt(unhex('429292F7734FFE002C4E5B11239FD3A4'), 'test') AS char);
    

    【讨论】:

    • 谢谢。但是,当我尝试上述三种方法之一时,我得到的不是foo,而是0x666F6F。当我尝试取消十六进制时,我得到0x。当我尝试这个网络服务时——link——我成功地得到了“foo”。我不明白为什么该功能不起作用。我还在 MySQL 文档中搜索了帮助,但没有找到帮助。
    • @NiccolòCavallini:该功能确实有效。您只需要了解二进制字符串不是字符串,并且这些加密函数主要适用于主字符串。二进制字符串上的unhex() 不起作用也不足为奇,它需要一个字符串。查看编辑,我添加了演员表。
    • @NiccolòCavallini 如果它“像魅力一样工作”,请接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2011-06-20
    • 2018-08-05
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多