php – 我应该如何存储AES加密密钥?

我使用
Linux CentOS 5,php和mysql DB在MediaTemple上运行DV 3.5服务器,并尝试使用AES加密电话记录.

我遇到了似乎很好的脚本PHPAES

但我不确定以下几点:

>我在哪里实际存储AES
用于加密和的加密密钥
解密电话号码?
>如何调用AES加密
用户提交数据时的密钥
通过表格和商店进入我们的MySQL
数据库?
>当我想为我们的内部客户服务代理解密这些信息时 – 他们又如何调用AES密钥?

我意识到这可能很简单,但请不要侮辱.我正在尝试学习如何推进任何类型的加密的最佳实践.我们没有必要的东西(到目前为止).

最佳答案 我开发了一个过程,我从一个初始加密密钥开始,我将其编码为SHA1哈希,然后使用带有用户名/密码组合的加密密钥并将其存储在数据库中.密码(散列或其他)永远不会存储在数据库中,仅在登录时用于解密加密密钥.然后,我使用该主用户名/密码创建具有密码的其他用户,其中PHP或JavaScript使用新用户的用户名/密码对解密密钥进行编码,并将该加密密钥存储在数据库中.当我尝试使用用户名/密码组合从数据库解密加密密钥时,我应该期望返回SHA1哈希.如果我没有获得可以解密数据的有效SHA1哈希,那么我知道密码错误且数据无法使用.您必须拥有有效的用户名/密码组合才能获得解密密钥,并通过SSL传输到客户端,使用JavaScript函数解密,然后存储在用于SSL会话的cookie中.

要绕过系统,解密数据并访问您必须感染的信息,在登录会话期间搜索过您的cookie的密钥记录器或木马,否则服务器所有者或没有用户名/密码组合的客户端都可以使用数据库中的数据没有暴力强迫它.使用AES 256位和强密码(12个字符,A-Z,a-z,0-9,符号等),你自己有一个相当难以破解的解决方案,或者至少有一个尝试会很痛苦.

每个帐户都有一个锁定功能,因此如果您尝试通过网络登录太多次并失败,该帐户将被锁定.所有PHP页面都编码/解码参数以防止SQL注入攻击并验证PHP会话是否处于活动状态并与您登录期间跟踪的上一个会话相匹配,并验证您的加密密钥是否有效.每次登录或访问登录页面时,上一个会话都将失效,或者如果会话超时,它也会失效.即使所有这些层都很快并且阻止人们使用PHP脚本将使用伪造的POST输出JSON到脚本和SQL注入攻击.它还限制了服务器所有者/管理员解密和读取您的信息(如果它存储在共享提供者等)的能力.

点赞