【发布时间】:2010-10-25 23:12:44
【问题描述】:
我是 AES 加密的新手,但我正在尝试构建一个解决方案:
- 接受消费者数据
- 使用 AES 和 a “公共”密钥
- 将该数据存储在 MySQL 数据库中
- 具有拉取和解密能力 仅使用私钥的数据 (存储在我的个人机器上,而不是 服务器本身)。
我意识到这可能有点矫枉过正,但我想过度保护我的消费者数据。
需要注意的几点:
- 这不是信用卡信息 所以请不要写信告诉我 关于 PCI-DSS,它是另一种形式 个人信息全部低于 500 每个字段的长度字符。
- 我可以存储消费者的碎片 信息和其他在一秒钟内 由一个独特的数据库捆绑在一起 会员 ID 以提高安全性。
- 传入的 MySQL 调用只能是 直接从我的服务器上制作 静态 IP。
- 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 文件数据的方法?
【问题讨论】:
标签: php mysql encryption aes