gpt4 book ai didi

PHP Openssl 解密 AES Mysql 加密

转载 作者:可可西里 更新时间:2023-11-01 06:37:42 29 4
gpt4 key购买 nike

所以我只是在我的 mysql 表上做一些基本的数据加密。我遵循了此处的指南 https://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_aes-encrypt

但是我遇到了一个问题。虽然我知道我可以在 mysql 查询中使用 aes_decrypt 来解密数据。我还希望 php 能够自行执行此操作。

我已经让这部分工作了。如果 MySQL 像这样执行非常基本的 AES_ENCRYPTION

INSERT INTO tablename (dataset) VALUES (AES_ENCRYPT('testvalue','mysecretphrase'))

我可以像这样用 php 解密

openssl_decrypt(base64_encode($dR['dataset']), 'aes-128-ecb', 'mysecretphrase')

当我使用 MySQL 在上面的 url 中提到的推荐的 UNHEX(SHA2('mysecretphrase',512)) 时,我的问题出现了。

我尝试使用的 php sha* 函数可以确认它们都生成与 MySQLs sha2() 相同的字符串

openssl_digest('mysecretphrase', 'sha512')
// AND
hash('sha512', 'mysecretphrase')

最后,为了解决 MySQL 使用的 UNHEX(),经过一些研究,我发现 PHP hex2bin == unhex http://www.php.net/manual/en/function.hex2bin.php

但是,我在解密数据时没有得到任何结果。这是它不断失败的地方。我觉得我好像遗漏了什么,但这不会解密数据,只会返回空结果。

openssl_decrypt(base64_encode($dR['dataset']), 'aes-128-ecb', hex2bin(openssl_digest('mysecretphrase', 'sha512')))

如有任何帮助、指点或提示,我们将不胜感激。

最佳答案

我在这里回答是因为它显然比评论便宜...

上面的帖子非常准确地告诉您问题是什么,但并没有真正说明如何解决它。

openssl_encrypt() and openssl_decrypt() silent cuts the key to max 16 bytes length (at least for aes-128-ecb)

并且无法更改此设置,因此在 MySQL 中使用 AES_ENCRYPT 时,您需要通过创建 key 的子字符串来缩短 key 。

INSERT INTO tablename (dataset) 
VALUES (AES_ENCRYPT('testvalue',SUBSTR( UNHEX(SHA2('mysecretphrase',512)), 1, 16))))

请注意上面答案中的 l_16 列与 ["data2"] 相同,因为您使用了子字符串? (可能需要在 php 中执行 strtolower())

如果这引起了您的安全担忧,您将需要找到一种没有此限制的替代加密算法

关于PHP Openssl 解密 AES Mysql 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49236781/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com