https - 在 Web 应用程序中如何以及在何处进行加密?
问题描述
在 Web 应用程序中,密码加密是如何以及在何处发生的?例如,当用户注册一个网站时,用户设置的密码是否以明文形式传输并在服务器端进行加密并持久化在数据库中?
另一方面,当使用 HTTPS 时,数据将被加密并通过网络发送。在这种情况下,我们是否再次对传入的数据应用任何加密算法,然后将其保存在数据库中?我也很想知道通过 HTTPS 传输数据时将使用哪些加密算法。
解决方案
除了 martinstoeckli 答案:
规则 n°2:加密永远是第二选择。如果你可以使用散列,请这样做。
HTTPS 是异步加密(私钥 + 公钥)。原理是使用公钥加密的所有内容只能使用关联的私钥解密。
在我们的例子中,客户端将使用公钥来加密数据。服务器将是唯一能够使用私钥解密数据的服务器。
因此,在私钥完成工作后,您将获得数据的明文。
在这一点上,最好的办法(在我看来)是散列(+盐+最终胡椒)数据并将散列存储在数据库中。
例如,当用户尝试使用他的密码登录时,服务器将再次对收到的明文密码进行哈希处理(显然使用相同的盐/胡椒)并与数据库中的密码进行比较。
如果哈希值与数据库中的哈希值完全相同,则表示用户输入的密码正确。
推荐阅读
- java - 当 HttpServletRequest getHeader 返回未知?
- php - pg_dump 从一个 Cloud Foundry 实例到另一个
- swift - 如何在 Swift 4 中使用 sizeof() 方法
- haskell - 解析不明确的类型变量
- jquery-bootgrid - 如何应用引导网格过滤器?
- python - django project_form 无效?
- r - 如何将 scale 和 dist 与具有列名的数据集一起使用
- javascript - 如何将相同的元素添加到javascript数组n次
- php - 如何配置 PhpStorm 在调试文件时通过 IIS url 重写而不是直接加载文件
- swift - 保存和加载 UIDocumentBrowserViewController