使用 AngularJS 和 .net 的密码加密技术和安全密钥传输

Password encryption techniques and secure key transfer using AngularJS and .net

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

  1. AngularJs会将密码加密后发送到后台
  2. 在后端,加密后的密码将存储在数据库中。
  3. 在后端代码中,有一个地方我们必须调用第三个 party web API 并且必须传递用户名和密码的解密形式 用于身份验证。

简而言之,前端要对密码进行加密,后端要有解密的能力。

我分析了很多密码安全交易的技巧。

  1. 哈希:这是安全传输 password.But 的最佳方法 问题是,我们无法根据我的要求将散列密码反转为其原始形式 form.According,我必须将散列密码反转为其原始形式,因为我们必须将密码的原始形式传递给第三方进行身份验证派对 API.
  2. 对称算法使用相同的密钥进行解密和 encryption.So 有必要将密钥安全地共享到前端和后端。如果我们硬编码两边的键值,这不是一个好方法。
  3. 非对称算法使用public和私钥 加密和解密respectively.So我觉得这个比上面两个techniques.Since一个入侵者public安全多了 密钥无法解密密码。

我不熟悉 AngularJS 的加密和解密处理。我的查询是关于密钥 handling.How 我们可以安全地将密钥存储在前端和后端而不是在 code.Is 中对它们进行硬编码有任何安全的方式来共享这些 keys.Which 算法是最适合我的要求? (根据我的分析,我发现非对称是满足此要求的更好选择)。

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

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

密钥交换是一个更棘手的话题,因为您的最终用户软件很可能在浏览器中运行(作为 Angular 应用程序)。处理此问题的一种方法是将您的 public 密钥包装在可在浏览器中验证的证书中。

您还需要考虑许多其他攻击和方面。例如,如何保护您的系统免受重放攻击,以及如何在满足可用性要求的同时轮换密钥。涵盖这个答案中的所有主题是不可能的,因为它们太宽泛了,所以我把它留在这里。