Php 我在干什么?使用AES_DECRYPT在MySQL上解密AES
我设法用AES_encrypt加密密码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
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
来存储加密字符串时,fkdkfjkddkFor 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`