我设法使用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_DECRYPT,它仍然返回NULL值。
任何猜测?
答案 0 :(得分:0)
尝试使用AS,例如:
SELECT AES_DECRYPT(acc.password,'fawefwefwaef4waegdf235twe4rsgrdtgw54ershtfg')AS my_decrypted_password 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`