我究竟做错了什么?使用AES_DECRYPT在MySQL上解密AED

时间:2014-02-10 02:14:42

标签: php mysql encryption aes

我设法使用AES_ENCRYPT加密密码。

SELECT
acc.id,
acc.user_id,
acc.type,
acc.account,
acc.`password`,
acc.`status`
FROM
acc

返回:

id      user_id   type          account         password                   status    
16      4         Main          xjdkdndn        xU+WHHT9Eidt8J+xoNMbKw==   0    

密码显然是加密的。我试图用它解密它:

SELECT AES_DECRYPT(password,'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg')
FROM acc;

fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg是加密密钥。

但是它总是返回一个空值。

我做错了什么?

忘记添加,密码为fkdkfjkddk

编辑:

伙计我将我的mysql升级到5.6版本,现在这就是返回的内容:

Screenshot

看起来可能是aes编码的东西,但后来我使用AES_DECRYPT,它仍然返回NULL值。

任何猜测?

5 个答案:

答案 0 :(得分:0)

尝试使用AS,例如:

SELECT AES_DECRYPT(acc.password,'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg')AS my_decrypted_pa​​ssword FROM acc;

其他: 上面的代码是我正在使用的,它运行良好,但adamS是正确的,你想要将密码存储为Blob或TinyBlob。这可能是你返回null的原因,因为什么都没有存储,你看到的是NULL加密,而不是你的密码,即你在上面显示的内容 xU + WHHT9Eidt8J + xoNMbKw == 只是NULL,它不是您的密码。改为Blob或Tinyblob,你应该很好。

答案 1 :(得分:0)

假设您的加密密钥正确,这将从用户ID为16中选择密码字段,然后尝试解密并将其作为UTF8编码的字符串传递给您。

SELECT password, CONVERT(AES_DECRYPT(FROM_BASE64(password), 'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg') USING utf8) AS `password` FROM `acc` WHERE `id` = 16

答案 2 :(得分:0)

我在我的数据库上安装了这个:http://wi-fizzle.com/downloads/base64.sql,现在它正在运行!

感谢帮助人员。

答案 3 :(得分:0)

您拥有的加密密码位于base64中,我怀疑您在解密时没有从base64转换。您需要从base64转换。这是它应该如何工作:

SELECT to_base64(aes_encrypt('fkdkfjkddk','fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg'));

返回:pS9sEA / o6XAaUYud631R2g ==

SELECT aes_decrypt(from_base64('pS9sEA/o6XAaUYud631R2g=='),'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg');

返回:fkdkfjkddk

答案 4 :(得分:0)

对我来说,当我使用 VARCHAR(200) 而不是 TEXT 来存储我的加密字符串时,问题得到了解决。

这是我的工作解决方案:

加密(将我的列存储为加密字符串)

UPDATE `table` 
SET `column_name` = TO_BASE64(
    AES_ENCRYPT(
        'data', 
        SHA2(
            CONCAT(
                'my app salt',
                'my very good encryption key / passphrase'
            ),
            512
        )
    )
);

解密(阅读我的表格)

SELECT *, 
AES_DECRYPT(
    FROM_BASE64(`column_name`), 
    SHA2(
        CONCAT(
            'my app salt',
            'my very good encryption key / passphrase'
        ),
        512
    )
) AS `column_name`
FROM `table`