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

时间:2010-03-10 02:08:39

标签: php javascript security encryption

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

http://sample.com/mypage/TDjsavbuydksabjcbhgy

其中 TDjsavbuydksabjcbhgy 相当于 12345 的加密数据。 现在我想通过解密来检索PHP中的数据,以便我可以使用 12345

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

提前致谢。

5 个答案:

答案 0 :(得分:9)

我不确定你在javascript中加密会得到什么。您可以向公众有效地使用您的整个例行程序和加密密钥。如果您试图防止嗅探,则应使用SSL。

答案 1 :(得分:5)

你可以使用AES + Base64,在http://www.movable-type.co.uk/scripts/aes.html有一个JS aes库,在php中也可以使用http://www.movable-type.co.uk/scripts/aes-php.html

答案 2 :(得分:5)

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

作为一个跳跃点,您可以从这里开始javascript公钥/私钥示例: http://shop-js.sourceforge.net/crypto2.htm

这里是PHP方面: http://www.webtatic.com/blog/2009/07/php-public-key-cryptography/

答案 3 :(得分:3)

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

答案 4 :(得分:0)

我发现(服务器与客户端之间的桥接)是完美的方法。 使用php进行服务器端加密和解密不是问题。 但是客户端和javascript加密意味着没有安全性,因为您的代码,加密密钥,算法以及所有内容都可供公共用户使用。 (如上所述,我找到了这个答案和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
 ?>

客户端(相同的index.php页面)-使用 forge cryptojs 进行加密: 我们在jquery脚本中回显由php加密生成的随机生成的接收密钥,并针对所有形式的输入执行此操作。**

<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>

通过ajax发送Final,并通过php解密服务器端。 不要忘记您保留用于在数据库中解密的私钥或任何安全的解密位置。 注意:您必须执行许多此类快捷方式才能实现100%安全。 希望能有所帮助。