我希望加密安全数据,例如社会安全号码,但是会有其他人(例如我的网络主机,员工)可以完全访问加密的源代码。是否有可能以某种方式使用不需要包含在原始源中的密钥进行加密,这样只有我(谁知道密钥)才能解密?
答案 0 :(得分:3)
你正在思考它的方式,不,它无法完成。不,只是说“非对称加密”也无济于事。当某些操作将由这些数据(由合法用户)累积时,您必须对它们进行解密,无论您的解密密钥存储在哪里,您的代码都会尝试访问它(意味着服务器上的任何管理员都可以访问)它也是。)
当然,如果您想以半永久的方式加密客户端的数据(用户将无法再次更改或读取数据)那么是,那些建议与您进行非对称加密的人(开发人员)保密私钥是100%正确的。
这样做的方法如下:
用户注册:生成密钥对(私有和公共)将公共存储在数据库中,使用用户密码的哈希加密私有并将其存储在数据库中。现在再次散列哈希密码并将其存储在数据库中。
用户输入敏感数据:获取输入并使用数据库中的公钥加密(并按照Hugo的建议,使用用户的密码作为流程的密码)并将其存储在数据库中。 / p>
用户访问/编辑他的信息:获取用户密码,哈希2次并验证他,然后如果他是合法用户,则使用第一个哈希来解密私钥并使用私钥解密数据(使用用户密码作为流程的密码)。
请记住,没有100%的安全性,接受这个想法并改进它。
更新:我与一位与付款处理公司合作的朋友谈过,他将现实情况描述如下:
没有办法绕过它,运行服务器的人总是可以访问数据,无论是否加密。您必须将私钥保留在某个位置。我们将SSN和信用卡号码保存在具有物理安全性的单独服务器上的单独数据数据库中,并且只允许授权人员访问该服务器。除了在同一台服务器上使用脚本外,我们不会查询安全数据库,这些脚本为我们提供了处理所有付款的最小API。在我们的纯文本数据库中,我们仅保留部分信息(XXXX-XXXX-XXXX-4569)仅供查看。所有编辑,阅读,追加,添加,删除都通过API在安全服务器(安全软件,上锁,安全摄像头)上进行。
答案 1 :(得分:1)
简短的回答是否定的。
但是,您可以使用不对称密钥,例如GPG密钥(或SSL密钥)。
您有私钥和公钥。公钥用于加密,私钥用于解密。您可以在源代码中包含公钥,并仅保留私钥。
答案 2 :(得分: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表单记住。