php - 在 PHP PDO 中使用 AES_ENCRYPT CBC 模式
问题描述
我可以AES_ENCRYPT()
在 MySQL 本身中使用 MySQL 的功能。
以下是我用来启用它的步骤:
1) 将以下行添加到 /etc/my.cnf 以使用 CBC 模式
[mysqld]
block_encryption_mode=aes-256-cbc
2) 重启 MySQL 3) 检查它是否在 MySQL 中工作:
SELECT @@session.block_encryption_mode;
4)创建随机IV:
SELECT RANDOM_BYTES(16);
5)将IV存储在安全的地方并在MySQL中设置@iv
SET @iv = 'output from above'
6)测试在MySQL中插入数据
UPDATE some_table
SET column_name = HEX(AES_ENCRYPT("data here", 'enc key here', @iv))
WHERE id=1;
这很好用。我可以用 tha 更新列
但是,当我尝试从 PHP PDO 添加数据时,出现以下错误:
HY000 1882 The initialization vector supplied to aes_encrypt is too short. Must be at least 16 bytes long
这是一个查询:
UPDATE session_data SET
session_url=:session_url,
session_password=:HEX(AES_ENCRYPT(:session_password), :enc_key, @iv),
session_creation_datetime=now()
WHERE session_id=:session_id
该查询在没有 AES_ENCRYPT() 的情况下工作正常。我怀疑在 PHP PDO 查询 中使用@iv是问题所在。
有谁知道这是否属实以及是否有另一种方法可以从 PHP 访问 MySQL 中的@iv?