Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP纯文本加密-确保密钥安全_Php_Security_Encryption_Key - Fatal编程技术网

PHP纯文本加密-确保密钥安全

PHP纯文本加密-确保密钥安全,php,security,encryption,key,Php,Security,Encryption,Key,在典型的web场景中,网站用户将出现,使用网站,填写表单,并将数据传输到服务器以存储在数据库中。现在让我们假设我们需要确保他们的地址是加密的,因为它是绝密的,只有那些能够访问网站后端的人才能看到那个地址是什么-这相当容易实现,对吗?我们只需在服务器端存储一个加密密钥,用于生成加密数据,将数据存储在数据库中,然后再次使用密钥对其进行解密 现在假设托管公司有人浏览您服务器上的文件-他们可以非常轻松地访问此加密密钥,然后使用它解密他们想要的任何数据,因为数据库中的所有地址都使用相同的密钥加密 我只是试

在典型的web场景中,网站用户将出现,使用网站,填写表单,并将数据传输到服务器以存储在数据库中。现在让我们假设我们需要确保他们的地址是加密的,因为它是绝密的,只有那些能够访问网站后端的人才能看到那个地址是什么-这相当容易实现,对吗?我们只需在服务器端存储一个加密密钥,用于生成加密数据,将数据存储在数据库中,然后再次使用密钥对其进行解密

现在假设托管公司有人浏览您服务器上的文件-他们可以非常轻松地访问此加密密钥,然后使用它解密他们想要的任何数据,因为数据库中的所有地址都使用相同的密钥加密

我只是试图用新的安全模型覆盖每个基地,在“不信任任何人”的政策下,我正在寻找阻止托管公司获取数据的方法

那么,有没有人有任何建议来阻止那些具有服务器访问权限的人获取密钥和解密数据?密码加密会有任何帮助吗,或者他们仍然能够很容易地解密数据


我想不出解决这个问题的办法。有人对解决这个问题有什么建议吗?

在浏览器中加密和解密发送到主机的所有内容。使用在客户端上输入的密码短语进行加密,切勿将密码短语发送到主机。在

中有一个更完整的描述,我想这对于共享人质来说是一个风险。我的大多数项目都使用AmazonAWS,个人博客使用linode。这两种解决方案都采用“你是你自己的系统管理员”的模式,没有人窥视你的机器


如果我是你的话,我会用带可变键的mcrypt。例如,同一行的whe username字段。这样,对于要被破坏的数据,入侵者将需要访问您的数据库和源代码,以确定如何解密数据。到那时,你的问题将远比单纯的信息泄漏更严重。

好吧,大多数托管公司都可以访问所有的数据库和文件,这真的很糟糕

几年前,我做了一些加密和解密的实验

最好的办法是使用个人服务器,但这并不便宜

示例RC4加密需要密钥来加密数据。现在棘手的部分是使该密钥也用其他加密方式加密,如Base64、Atom128。这不会使它100%安全

但解密数据将非常困难

我希望你能理解我

干杯:)


顺便说一句,这里没有100%安全的数据

如果您不需要在线解密数据,这是公钥加密的理想情况。特别是密封API。例如,使用libnail(PHP7.2):

加密 解密
但是,如果您确实需要能够从Web服务器解密数据,那么访问Web服务器的任何人都可以窃取密钥并解密您的数据。任何加密算法都无法阻止拥有密钥的人解密消息


总是从一个开始。

托管您自己的服务器可以解决这个特定问题,但我猜这不是一个选项?我只是想到了一个主意。。您可以将密钥存储在另一个域中吗?与数据库和代码隔离。。。也许是一个探索的选项:)或者使用不同的托管公司-一个用于加密密钥,另一个用于数据?除了,即使托管公司仍然可以访问您的代码,只需进入查看您从何处获取密钥,并以代码获取密钥的相同方式从其他域获取密钥。认为数据一旦加密,就可以安全地不受攻击,这是一种常见的误解。即使没有钥匙,它也不是。因此,真正的问题是:为了达到额外的安全级别,需要付出什么样的努力
服务器仅限于持久化和检索浏览器发送给它的任何加密数据,并且从不以普通形式实际访问敏感数据
。这违背了提问者的要求,即
只有那些能够访问网站后端的人才能看到该地址是什么
在用户不在场的情况下,他的服务器如何使用用户信息?例如,如果服务器需要使用用户地址自动向用户发送邮件,在用户登录并输入其密码之前,服务器无法解密地址以制作邮件标签。@PatrickEvans这不是用户发布的要求的一部分OP@RiggsFolly不止一个人可以合法地知道密码短语。@MikeW,
只有那些能够访问网站后端的人才能看到该地址是什么
,这正是他的要求,为了获得该地址,他们必须使用服务器才能获得该地址。因此,服务器必须以某种方式处理信息,即使只是为了显示它。而要使用它做任何事情都必须首先解密。它是一个专用服务器,但由一家公司管理。我不能绝对肯定他们不会访问数据库或web文件,所以我正在寻找一种解决方案,阻止他们解密数据,只是为了确保安全。
$store_me = sodium_crypto_box_seal($plaintext, $box_publickey);
sodium_memzero($plaintext);
$plaintext = sodium_crypto_box_seal_open($stored_msg, $box_keypair);