【问题标题】:How to encrypt a password on the client (AngularJS), send it to the server (expressJS) and decrypt it on the server?如何在客户端(AngularJS)上加密密码,将其发送到服务器(expressJS)并在服务器上解密?
【发布时间】:2016-09-07 08:20:11
【问题描述】:

我想在客户端 (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

【问题讨论】:

标签: javascript angularjs node.js express encryption


【解决方案1】:

在客户端和服务器之间安全传输数据的唯一安全方法是使用 SSL 保护连接。您本质上所做的只是混淆,可以逆转。

【讨论】:

  • 非常正确,但这样做会使它更难一步,并且通常足以阻止偶然在他/她的浏览器中找到开发人员面板的临时修补匠。
【解决方案2】:

您可以使用斯坦福 Javascript 加密库:https://bitwiseshiftleft.github.io/sjcl/。它应该适用于 Angular 和 Node。

除此之外,最好的办法是确保使用 HTTPS 进行连接。

【讨论】:

    【解决方案3】:

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

    所有密码都应该经过散列、加盐和拉伸。如果可以解密,则不安全。见Serious Security: How to store your users’ passwords safely

    我最喜欢的答案:

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

    您可以使用以下库:

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

    3年后更新:

    4 年后更新(哇哦!)

    仍然不相信?我也不是:)

    — Password encryption at client side

    另见:

    Is it worth hashing passwords on the client side


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

    https://letsencrypt.org/about/

    【讨论】:

    • 哇...必须为您提供覆盖所有基地的道具!
    猜你喜欢
    • 2015-10-29
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多