encryption - 我可以在前端和后端加密密码吗?

标签 encryption api-design

我正在制作一个需要登录的应用程序。

我使用 node.js 作为 API。

我知道我必须在后端加密密码以防数据库被盗。 但是,如果由于某种原因 HTTPS 失败或我们这边的某些开发人员有恶意,他/她可以很容易地窃取原始密码,如果它也没有在前端加密的话。

所以我的问题是,如果我同时使用后端的 Argon2 和前端的 BCrypt 会不会有问题?

(我还假设 Argon2 更快,所以如果攻击者想要暴力破解,他也必须在他这边使用慢速的,而不是我的 api 重载他/她的 shannigans)

我知道有一些类似的问题,但他们问我是否应该使用一个或另一个,答案是后端和 HTTPS。

我将使用 HTTPS 和后端加密。但我问是否也可以(或一个好主意)在前端使用加密。

最佳答案

Argon2 和 BCrypt 不是加密算法。它们是密码拉伸(stretch)器(正式名称为“PBKDF”或“基于密码的 key 派生函数”)。但是,同时使用两者没有意义。

您正在寻找的设计是这样的:

  • 在前端应用密码扩展器,这样就不会将原始密码发送到服务器。
  • 在后端应用快速哈希 (SHA-256),这样经过哈希处理的密码就不会存储在数据库中。

第一部分保护用户。他们的密码永远不会离开他们的机器。第二部分保护您的数据库。即使它被盗,攻击者也无法使用存储在那里的哈希值登录您的系统。

关于encryption - 我可以在前端和后端加密密码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67201493/

相关文章:

django - 为什么在 API 中使用 URL 参数而不是请求正文?

c# - 我应该有一个比它的语句长的方法名吗?

c++ - 通过CRTP简化相互扩展类的API

c++ - 如何使用 Crypto++ 加密字节数组

c - 使用base64算法进行加密和解密

java - 在java中用公钥加密,在C#中用私钥RSA解密

ios - viewDidLoad 方法命名是否具有误导性?

java - Android - Java 服务器 AES 加密不起作用 - 不同的 key

java - AES - 在 Java 中用密文存储 IV

c# - 设计 API (C#) 的正式原则和过程