Javascript和PHP加密/解密


Javascript and PHP Encryption/Decryption

基本上,我有一个ajax表单携带登录信息,有什么方法我可以加密密码之前,它在ajax发送,然后在php解密?

或者我应该从其他角度看待它吗?

非常感谢

没有理由在JavaScript或PHP中做任何加密作为合适的解决方案是使用SSL (HTTPS)。现在你甚至可以免费获得在所有浏览器中受信任的证书,所以没有理由不使用SSL。

如果你因为某些原因不能使用SSL,你可以使用RSA的JavaScript实现,这样你就可以在本地加密它,但只有你的服务器能够再次解密它。

您可以使用RC4,因为我知道它在PHP和Javascript中有实现。然而,使用任何类型的加密,您都必须离开密钥客户端(因此它可以加密它),这意味着任何访问您的页面的人都可以获得密钥并解密它(从而破坏了这一点)。

您最好在客户端对其进行散列(然后在PHP中匹配散列,如果您不需要知道密码),或者使用公私钥加密(如RSA),以便客户端可以加密,但不能解密。

对于散列,请查看Javascript的hash()和sha1。

RSA,请看这篇博文http://www.sematopia.com/2008/10/rsa-encrypting-in-javascript-and-decrypting-in-php/

使用SSL证书并从AJAX表单通过HTTPS发送登录。

你不能以安全的方式。你应该使用https

您可以在JS和PHP中执行md5(password),然后比较加密的密码。

由于用户名没有加密,所以可以使用它在PHP中从DB中获取密码,然后加密。

最好的方法是:

  • 生成一个uniqid,保存在$_SESSION['crypt_key']中,并将其作为ajax表单的隐藏输入发送;
  • 发送前使用md5(crypt_key + password)在JS中加密;
  • 在PHP中使用md5($_SESSION['crypt_key'] . $password)加密,并对它们进行比较。这样,每个请求都会传输一个不可预测的加密密码。