如何在客户端(AngularJS)加密密码,将其发送到服务器(expressJS)并在服务器上解密?

新手上路,请多包涵

我想在客户端(angular.js)加密密码,将其发送到服务器(express.js)并在服务器上解密。我想要一个简单的方法。我使用 $http 来发布请求。我知道退出 angular-bcrypt 库和 nodeJS 中的相同,但对我来说不值得,因为它只有方法比较。

我想要这样的东西:

 password = document.getElementById('txtPassword').value;
var xorKey = 129; /// you can have other numeric values also.
    var result = "";
    for (i = 0; i < password.length; ++i) {
        result += String.fromCharCode(xorKey ^ password.charCodeAt(i));
    }

但是,我只找到了在c#中解密的方法:

 public bool Authenticate(string userName, string password)
    {
        byte result = 0;

        StringBuilder inSb = new StringBuilder(password);
        StringBuilder outSb = new StringBuilder(password.Length);
        char c;
        for (int i = 0; i < password.Length; i++)
        {
            c = inSb[i];
            c = (char)(c ^ 129); /// remember to use the same XORkey value you used in javascript
            outSb.Append(c);
        }
        password = outSb.ToString();

       // your rest of code
    }

任何想法?非常感谢。 :P

原文由 Izaskun Peña 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 290
1 个回答

永远不要解密密码。它们应该使用单向加密进行散列。服务器应提供 随机数,以便客户端在每次登录时返回不同但可验证的答案。

所有密码都应该经过散列、加盐和拉伸。如果可以解密,那就不安全了。请参阅 严重的安全性:如何安全地存储用户的密码

我最喜欢的答案:

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

您可以使用以下库:

  • j加密。基于 Javascript 的客户端-服务器非对称加密

三年后更新:

4年后更新(哇哦!)

还是不相信?我也不 :)

— 客户端密码加密

也可以看看:

是否值得在客户端散列密码


2017 年 3 月更新:考虑获得免费的 SSL 证书

https://letsencrypt.org/about/

原文由 georgeawg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题