1

我正在寻找加密安全数据,例如社会安全号码,但是会有其他人(例如我的网络主机,员工)可以完全访问加密的源代码。是否可以使用不需要包含在原始源中的密钥以某种方式加密,这样只有我(谁知道密钥)才能解密?

4

3 回答 3

3

按照你的想法,不,做不到。不,只是说“非对称加密”也无济于事。当某些操作将累积在这些数据上(由合法用户)时,您必须解密它们,并且无论您的解密密钥存储在哪里,您的代码都会尝试访问它(这意味着服务器上的任何管理员都可以访问它也)。

当然,如果您想以半永久性方式加密客户的数据(用户将无法再次更改或读取数据),那么是的,建议与您(开发人员)进行非对称加密的人保留私钥秘密,100% 正确。

一种方法如下:

  1. 用户注册:生成密钥对(私人和公共)将公共存储在数据库中,用用户密码的哈希加密私人并将其存储在数据库中。现在再次散列哈希密码并将其存储在数据库中。

  2. 用户输入敏感数据:获取输入并使用数据库中的公钥对其进行加密(按照 Hugo 的建议,使用用户的密码作为该过程的密码)并将其存储在数据库中。

  3. 用户访问/编辑他的信息:取用户密码,哈希2次并认证他,然后如果他是合法用户,则使用第一个哈希解密私钥并使用私钥解密数据(使用用户密码作为进程的密码)。

请记住,没有 100% 的安全性,请采纳这个想法并加以改进。

更新:我和一位在支付处理公司工作的朋友交谈,他描述了现实生活中的情况如下:

没有办法,运行服务器的人总是可以访问数据,无论是否加密。您必须将私钥保存在某个地方。我们将 SSN 和信用卡号保存在单独服务器上的单独数据库中,该服务器具有物理安全性,并且只允许授权人员访问该服务器。除了在同一台服务器上使用脚本外,我们不会查询安全数据库,这些脚本为我们提供了处理所有付款的最低限度的 API。在我们的纯文本数据库中,我们仅保留部分信息 (XXXX-XXXX-XXXX-4569) 仅供查看。所有编辑、读取、附加、添加、删除都通过 API 发生在该安全服务器(安全软件、上锁的门、安全摄像头)上。

于 2012-06-26T05:20:45.947 回答
1

最简洁的答案是不。

但是,您可以使用非对称密钥,例如 GPG 密钥(或 SSL 密钥)。

你有一个私钥和公钥。公钥用于加密,私钥用于解密。您可以在源代码中包含公钥,并且只保留您自己的私钥。

于 2012-06-26T04:43:40.757 回答
0

你可以使用mcrypt

示例编码:

$key = "mykey";
$data = "my data";
$enc_data = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_ECB, md5($key));

示例解码:

$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $enc_data, MCRYPT_MODE_ECB);

$key 可以在源代码之外给出,也可以通过 html 表单记住和给出。

于 2012-06-26T06:18:06.260 回答