我对AES加密还不熟悉,但尝试构建一个这样的解决方案:
- 接受消费者数据
- 使用AES和“公共”密钥加密该数据
- 将该数据存储在MySQL数据库中
- 仅能使用私钥(存储在我的个人计算机上而非服务器本身)拉取和解密数据。
我意识到这可能有点过度保护,但希望过度保护我的消费者数据。
需要注意以下几点:
- 这不是信用卡信息,请不要告诉我PCI-DSS,这是其他形式的个人信息,每个字段长度都不超过500个字符。
- 我可能会将消费者信息的某些部分存储在第二个数据库中,并通过唯一的成员ID进行关联,以提高安全性。
- 只能从我的静态IP直接向我的服务器发出MySQL调用。
- SSH root已禁用,端口已更改等等,因此我认为我的服务器防止任何“基本”误用的能力相当不错。
我已经在网上和SO上寻找文章,但没有找到如何完全将私钥保持在服务器之外的内容。即使我需要将其保存在服务器上,也希望得到如何继续前进的想法或建议。
编辑 - 澄清
为了更清楚地表达,我正在尝试实现以下目标(以非常基本的形式):
客户在线输入其电话号码。
使用密钥A在线加密输入的电话号码并将其存储在mysql数据库中。
此时,客户将无法再看到完整的电话号码,但可以更新它(通过进行第n次密钥A过程)。
- 作为系统管理员,我只能通过下载并在我的本地计算机上解密数据来访问数据(或者我必须首先上传一个临时文件,然后用它来解密我需要的数据)。
编辑2 - 我是个白痴
我正在使用Andrew Cooper的下面的响应,但是在让我的脚本读取我生成的.pem文件的内容时遇到了麻烦。根据下面的代码 - 我该如何使$public key对应于我服务器上特定的.pem文件?
<?php
if (isset($_SERVER['HTTPS']) )
{
echo "SECURE: This page is being accessed through a secure connection.<br><br>";
}
else
{
echo "UNSECURE: This page is being access through an unsecure connection.<br><br>";
}
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $privatekey);
// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
echo "Private Key:<BR>$privatekey<br><br>Public Key:<BR>$publickey<BR><BR>";
$cleartext = '1234 5678 9012 3456';
echo "Clear text:<br>$cleartext<BR><BR>";
openssl_public_encrypt($cleartext, $crypttext, $publickey);
echo "Crypt text:<br>$crypttext<BR><BR>";
openssl_private_decrypt($crypttext, $decrypted, $privatekey);
echo "Decrypted text:<BR>$decrypted<br><br>";
?>
编辑3 - 可能不是“白痴”,而是分号讨厌我
我的分号错位了。我正在使用函数:file_get_contents(),但读取.pem文件的数据是否有更优选的方法?