Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我在干什么?使用AES_DECRYPT在MySQL上解密AES_Php_Mysql_Encryption_Aes - Fatal编程技术网

Php 我在干什么?使用AES_DECRYPT在MySQL上解密AES

Php 我在干什么?使用AES_DECRYPT在MySQL上解密AES,php,mysql,encryption,aes,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

我设法用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版本,现在返回的是:

这看起来像是可以被aes编码的东西,但是我使用aes_解密,它仍然返回一个空值


猜猜看

尝试使用AS,例如:

选择AES_DECRYPT(acc.password,'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg')作为我从acc解密的_密码

其他:
上面的代码就是我正在使用的代码,它工作得很好,但是adamS是正确的,您确实希望将密码存储为Blob或TinyBlob。这可能就是您返回null的原因,因为没有存储任何内容,并且您看到的是null加密的,而不是您的密码,即,您上面显示为xU+WHHT9Eidt8J+xoNMbKw==的内容只是null,不是您的密码。更改为Blob或Tinyblob,您应该会表现良好。

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

SELECT password, CONVERT(AES_DECRYPT(FROM_BASE64(password), 'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg') USING utf8) AS `password` FROM `acc` WHERE `id` = 16
我在我的数据库上安装了这个:现在它可以工作了


谢谢大家的帮助。

您的加密密码在base64中,我怀疑您解密时没有从base64转换。您将需要从base64转换。这就是它的工作原理:

SELECT to_base64(aes_encrypt('fkdkfjkddk','fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg'));
返回:pS9sEA/o6XAaUYud631R2g==

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

返回:当我使用
VARCHAR(200)
而不是
TEXT
来存储加密字符串时,fkdkfjkddk

For me问题已得到修复

以下是我的工作解决方案:

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

解密(阅读我的表格)


这返回了加密密码。我编辑了答案。您需要首先从base64解码密码,然后解密它(因为它存储为base64编码字符串)。这只适用于MySQL版本>5.6+的情况。另一种选择是将加密密码存储为BLOB。这将返回一个空值。我正试图找到一种方法将我的文本列转换为BLOB,但找不到方法,只有相反的方法。你能给我举个例子吗?
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`