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

Iza*_*eña 3 javascript encryption node.js express angularjs

我想加密客户端上的密码(angular.js),将其发送到服务器(express.js)并在服务器上解密.我想要一个简单的方法.我使用$ http来POST请求.我知道退出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));
    }
Run Code Online (Sandbox Code Playgroud)

但是,我只在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
    } 
Run Code Online (Sandbox Code Playgroud)

任何的想法?非常感谢你.:P

geo*_*awg 15

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

所有密码都应进行哈希,盐渍和拉伸.如果可以解密,则不安全.请参阅严重安全性:如何安全地存储用户密码.

我最喜欢的答案:

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

您可以使用以下库:

  • jCryption.Javascript上的客户端 - 服务器非对称加密

3年后更新:

4年后更新(Wohoo!)

还是不相信?我也不 :)

- 客户端的密码加密

也可以看看:

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


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

https://letsencrypt.org/about/


Jos*_*eph 3

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