客户端密码加密

可能重复:
关于客户端的密码散列系统

我必须保护我的网站用户的密码。 我所做的是在服务器端使用MD5加密哈希。 但问题在于密码在到达服务器之前仍以纯文本形式保留,这意味着可以使用流量监控来捕获密码。 所以我想要的是使用客户端密码加密/散列机制并发送加密/哈希密码。 任何人都可以告诉做什么方式?


这不是安全的,并且很容易解释为什么:

如果您在客户端散列密码并使用该令牌代替密码,那么攻击者将不可能找出密码。

但是,攻击者不需要知道密码是什么,因为你的服务器不再期待密码 - 它期望的是密码。 攻击者确实知道该令牌,因为它是通过未加密的HTTP发送的!

现在,有可能将某种挑战/响应形式的加密一起破解,这意味着相同的密码会在每个请求中产生不同的令牌。 但是,这将要求密码在服务器上以可解密的格式存储,这是不理想的,但可能是一种合适的折衷方案。

最后,你是否真的想要求用户在登录到你的网站之前开启javascript?

无论如何,SSL既不是昂贵的,也不是特别难以设置解决方案


您需要一个可以在客户端加密输入并以加密形式将其传输到服务器的库。

你可以使用下面的库:

  • jCryption。 基于Javascript的客户端 - 服务器非对称加密
  • 3年后更新:

  • 斯坦福Javascript加密库
  • 4年后更新(Wohoo!)

  • CryptoJS - 易于使用的加密
  • ForgeJS - 几乎涵盖了所有
  • 仍然不相信? 我也不 :)

  • OpenPGP.JS - 将OpenPGP格式带到任何地方 - 以JS运行,以便您可以在您的Web应用程序,移动应用程序等中使用它。

  • 我会选择这个简单的解决方案。

    总结它:

  • 客户端“我想登录”
  • 服务器生成一个随机数#S并将其发送给客户端
  • 客户
  • 读取用户键入的用户名和密码
  • 计算密码的散列值,得到h(pw) (这是存储在数据库中的)
  • 生成另一个随机数#C
  • 连接h(pw) + #S + #C并计算其散列值,称之为h(all)
  • 发送到服务器的username #Ch(all)
  • 服务器
  • 从数据库中为指定的username检索h(pw)'
  • 现在它拥有所有计算h(all')的元素,就像客户端一样
  • 如果h(all) = h(all')然后h(pw) = h(pw)' ,几乎可以肯定
  • 没有人可以重复请求以指定的用户身份登录。 #S每次都会向散列中添加一个可变组件(这是基础)。 #C增加了额外的噪音。

    链接地址: http://www.djcxy.com/p/21563.html

    上一篇: Password encryption at client side

    下一篇: Hashing passwords before sending to server