对于一个网站,我使用一个简单的脚本将formdata存储在数据库中。数据使用AES_ENCRYPT加密,我使用的代码是:
$pdo = new PDO(
"mysql:host=" . DB_HOST . ";dbname=" . DB_NAME,
DB_USER,
DB_PASSWORD
);
$hash = SECRET_HASH;
$p = $pdo->prepare("
INSERT INTO entries
(firstname, lastname, email) VALUES
(
AES_ENCRYPT(:firstname, '{$hash}'),
AES_ENCRYPT(:lastname, '{$hash}'),
AES_ENCRYPT(:email, '{$hash}')
)
");
$result = $p->execute(array(
':firstname' => $data['firstname'],
':lastname' => $data['lastname'],
':email' => $data['email']
));
这一切都运行正常,我可以用这个解密数据:
select id, cast(aes_decrypt(firstname,'<secrethash>') as char), cast(aes_decrypt(lastname,'<secrethash>') as char), cast(aes_decrypt(email,'<secrethash>') as char) from entries
表列上的排序规则是latin1_swedish_ci。
现在另一个人正在使用他自己的数据库,即PostgreSQL而不是MySql。他测试了它,但无法解密数据。他告诉我他用utf-8作为整理。他在数据库中获得的数据类似于JcXOomXShZ7d6
,而我的数据类似于:,AfbIQlº˜Y¨¹Â
。
问题是我的数据库中已经存在一些我们想解密的数据,所以我想知道是否有办法解密这些数据?
我不知道问题是由于PostgreSQL / MySQL还是错误的排序规则类型。我试图将数据导入我的数据库并运行查询,但这不起作用。