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

Php 我应该如何存储AES加密密钥?,php,mysql,linux,aes,Php,Mysql,Linux,Aes,我使用Linux CentOS 5、php和mysql DB在MediaTemple上运行DV 3.5服务器,并尝试使用AES加密电话记录 我遇到了一个看起来不错的剧本 但我不确定以下几点: 我在哪里实际存储AES 用于加密和 解密电话号码 如何调用AES加密 用户提交其数据时的密钥 通过表单并存储到我们的MySQL中 数据库 当我想为我们的内部客户服务代理描述这些信息时,他们如何依次调用AES密钥 我知道这可能很简单,但请不要侮辱我。我正在努力学习如何推进任何类型的加密的最佳实践。(到目前为止

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

我遇到了一个看起来不错的剧本

但我不确定以下几点:

  • 我在哪里实际存储AES 用于加密和 解密电话号码

  • 如何调用AES加密 用户提交其数据时的密钥 通过表单并存储到我们的MySQL中 数据库

  • 当我想为我们的内部客户服务代理描述这些信息时,他们如何依次调用AES密钥


  • 我知道这可能很简单,但请不要侮辱我。我正在努力学习如何推进任何类型的加密的最佳实践。(到目前为止)我们还不需要的东西。

    我实际上走了这条路:

    我用一个存储在数据库本身(并且对于存储的每个记录都是唯一的)的salted散列加密初始数据。然后,我获取256bit AES加密字符串,并使用服务器端的公钥对其进行RSA加密

    为了解密,我必须用我的私钥上传一个临时文件并检索必要的数据


    在我看来相当安全。

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

    若要绕过系统,请解密数据并访问您必须感染的信息,这些信息在登录会话期间会被密钥记录器或特洛伊木马程序搜索到cookies,否则服务器所有者或没有用户名/密码组合的客户端都可以使用数据库中的数据,而无需强制执行。使用AES 256位和强密码(12个以上字符、A-Z、A-Z、0-9、符号等),您就得到了一个相当难破解的解决方案,或者至少是一个尝试起来很痛苦的解决方案


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

    这里实际上已经有人问过这一点。最终,我发现这是一个类似的问题,但不是同一个问题——也许我应该问,是否可以使用一个密钥(公共)进行加密,使用另一个密钥(私有)进行解密?什么咸杂烩?我想你的意思是散列一些其他数据并将其用作AES的密钥,而不是散列电话号码并称之为加密。但是,如果密钥只是数据库记录中另一个值的散列,则对数据库记录中的值进行加密是毫无意义的。如果之后立即使用RSA加密,为什么还要使用AES步骤?听起来你只是把一堆加密函数放在一起,假设它越复杂,就必须越安全。顺便说一句,把你的私钥上传到远程机器上只是为了解密那里的文件是个坏主意;你让它失去了你的控制。即使它是一个“临时”文件,您可能已经知道删除的文件通常不会被真正删除。最好将加密后的数据下载到您自己的机器上,并在那里解密。