Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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
如何在javascript中加密数据并在php中解密?_Php_Javascript_Security_Encryption - Fatal编程技术网

如何在javascript中加密数据并在php中解密?

如何在javascript中加密数据并在php中解密?,php,javascript,security,encryption,Php,Javascript,Security,Encryption,是否有任何javascript函数可以加密数据:例如,我想在ajax GET请求传递的URL中使用加密数据 http://sample.com/mypage/TDjsavbuydksabjcbhgy 其中TDjsavbuydksabjcbhgy相当于12345的加密数据。 现在我想通过解密来检索PHP中的数据,这样我就可以使用12345 可能吗?或者关于如何做到这一点的任何建议 提前感谢。我认为您必须使用SSL来加密所有内容。您可以使用AES+Base64,在上有一个JS AES库,在php中

是否有任何javascript函数可以加密数据:例如,我想在ajax GET请求传递的URL中使用加密数据

http://sample.com/mypage/TDjsavbuydksabjcbhgy
其中TDjsavbuydksabjcbhgy相当于12345的加密数据。 现在我想通过解密来检索PHP中的数据,这样我就可以使用12345

可能吗?或者关于如何做到这一点的任何建议


提前感谢。

我认为您必须使用SSL来加密所有内容。

您可以使用AES+Base64,在上有一个JS AES库,在php中也应该是可行的。

我不确定使用javascript进行加密会获得什么好处。您的整个例程和加密密钥有效地向公众提供。如果您试图防止嗅探,您应该使用SSL。

您可能正在寻找的是RSA加密。您可以为服务器生成一个密钥,该密钥具有公共版本和私有版本。javascript将包含可用于加密数据的公共版本,php将使用私有版本解密数据

作为起点,您可以从这里开始学习javascript公钥/私钥示例:

这里是PHP方面:

我发现(服务器和客户端之间的桥梁)是一种完美的方式。 使用php进行服务器端加密和解密不是问题所在。 但是客户端和javascript加密意味着没有安全性,因为您的代码、加密密钥、alghoritm以及所有这些都可供公共用户使用。 (我发现这个答案和SSL的使用如上所述)。 最后,我用一个技巧对客户端和服务器端进行了加密。 您可以首先加载php脚本中的随机加密密钥,并在jquery中使用它,这样每个用户在每个请求中都有许多密钥,这些密钥将用于相同的请求。 每次加密后,它都是一个不可用的密钥。 为了获得最大的安全性,您可以扩展此想法(由于某些安全目的,我无法详细描述,但可以通过这种方式解决)。 示例:index.php

 <?php

 $curl = curl_init();
 $url='http://some.xyz/keygen.php';
 ###we set url in a var to insure that anyone can't change it way.
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_POST, true);        
 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  $reply=curl_exec($curl);
 //$reply-< session key is generated in another page and replied to this
  //ex :15984762255sadasf4a5sfd5asfda745
 ?>

您不能为ajax使用安全服务器的任何原因?您试图防御的攻击是什么?请告诉我们您为什么要对其进行加密。这样做当然是可能的,但这可能不明智,或者对于您试图解决的问题,可能有其他更好的解决方案。好的,那么您将把密钥放在哪里,以便攻击者无法找到它?密钥可能是共享秘密,例如基于用户密码,并以一种不会“越界”的方式存储(js客户端存储有多种方式).SSL可能更安全。使用SSL是不够的。服务器可以在SSL解密后记录请求,SSL可以由反向代理提供,证书可能泄漏或被盗,等等。我们可能会有诸如Heartbleed之类的错误。为了更好的安全性,Javascript加密实际上可以减少暴露。@fernacolo-良好的加密完全是关于密钥管理和密钥交换。因此,如果您不使用SSL(特别是TLS的一些变体)也没有其他等效的方法来获取客户端的加密密钥,您正在使用自己的加密密钥,这样的安全性要低很多个数量级。@Thomas我从来没有告诉过不要使用TLS。这是必须具备的要求,但这还不够。例如,如果使用明文密码的登录请求永远记录在后端服务器上,那么未来的攻击者就必须使用TLS访问日志将获得许多密码。要解决此问题,您只需为每个登录表单请求生成一个新的软RSA密钥对,将私钥保留在会话内存中,并使用公钥在客户端进行加密。实际上不需要密钥管理,公钥也不需要特殊的密钥交换。攻击者必须访问会话data,这是过时的,通常不会被记录。@fernacolo-但这还不够。足以应对什么风险?足以破解TLS和/或访问您的服务器的未来攻击者可以破解您的加密。能够访问日志的未来攻击者。这完全取决于所记录的内容。不要记录web请求的有效负载。@fernacolo-RS每个登录都有一个密钥对……你应该在security.stackexchange.com上发布这个建议,看看他们怎么说。我猜他们会告诉你很多破解方法,比如陈旧的密钥、弱加密、中间人等,或者它并不比当前的TLS好。最后,这一切都取决于你面临的风险有多大我们特别想减轻压力。
<script>
     $('#form').find('input').each(function(){      
    rsa.keypair = keypair;
     var pemPublic = forge.pki.publicKeyToPem(<?php echo($reply); ?>,
   encoded=rsa.keypair.publicKey.encrypt($("#cleartext").val()),
    final = forge.util.encode64(encoded);
   </script>