基本上,我有一个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)
加密,并对它们进行比较。这样,每个请求都会传输一个不可预测的加密密码。