密码加密技术和使用angularjs和.net

时间:2018-03-29 05:19:36

标签: .net angularjs encryption-symmetric encryption-asymmetric key-management

我有一个应用程序,它使用AngularJs 1.5作为前端,使用.net框架作为后端。在我的应用程序中,我必须在来自前端的数据库上存储用户名和密码。要求是:

  1. AngularJs将加密密码并将其发送到后端
  2. 在后端,加密的密码将存储在数据库中。
  3. 在后端代码中,有一个地方我们必须调用第三个 派对Web API并且必须传递用户名和解密形式的密码 用于身份验证。
  4. 简而言之,前端应该加密密码,后端应该能够解密它。

    我已经分析了许多安全交易密码的技术。

    1. 哈希:这是安全传输密码的最佳方法。但是 问题是,我们无法将散列密码反转为原始形式。根据我的要求,我必须将散列密码反转为其原始形式,因为我们必须将原始形式的密码传递给第三个派对API。
    2. 对称算法使用相同的密钥进行解密和 因此,有必要将密钥安全地共享到前端和后端。如果我们对双方的密钥值进行硬编码,这不是一个好方法。
    3. 非对称算法使用公钥和私钥 分别加密和解密。所以我认为这比上述两种技术更安全。因为入侵者是公开的 密钥无法解密密码。
    4. 我不熟悉使用angularjs进行加密和解密处理。我的查询是关于密钥处理。如何在前端和后端安全地存储密钥,而不是在代码中对它们进行硬编码。是否有任何密钥处理安全的方式来共享这些密钥。哪种算法最适合我的要求?(从我的分析,我发现不对称是这个要求的更好选择。如果我错了,请纠正我。)

      提前感谢所有回复

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

不确定这是否仍然与您相关,但这是来的。这些是您要问的相当高层次和广泛的问题,因此,我为您提供一些一般性指导。

我肯定会为此使用非对称加密。我很可能会选择像RSA OAEP这样的东西,这要归功于随机填充,每次在同一输入上都会产生不同的密文。这样,攻击者就不会从密文中学到很多东西,而他可以设法拦截。

密钥交换是一个棘手的话题,因为您的最终用户软件很可能在浏览器(是Angular应用)中运行。一种解决方法是将您的公钥包装在可以在浏览器中验证的证书中。

还需要考虑许多其他攻击和方面。例如,如何保护系统免受重放攻击,以及如何在仍然满足可用性要求的同时旋转密钥。覆盖此答案中的所有主题都不可能太宽泛,因此我将其保留在此处。