security - 密码自加密可行吗?

标签 security encryption passwords

我一直在阅读有关密码存储的内容,基本上发现了两种常用的技术。

  1. 使用单个 key 对存储的所有密码进行加密。
  2. 使用哈希值
    • 使用带盐的哈希值。

存储“自行加密”的密码是否存在缺陷,即使用密码 password1 加密显示 password1 的 txt,而不将其未加密存储,并且当用户想要登录、解密、比较并授予访问权限(或不)?

我对这个话题不太了解,所以有人可以启发我吗?

最佳答案

与使用带盐的哈希值相比,这有三个缺点。

  1. 它很容易受到字典攻击:任何掌握您密码文件的人都可以尝试常用密码(例如password1),并查看它们是否自加密到存储的密码值(value)。更糟糕的是,根据您进行加密的方式,这可以在获取密码文件之前离线完成,并将结果存储在查找表中,以便当有人获取您的文件时可以立即破解它。
  2. 它需要可变的存储量,这对数据库不太友好。哈希具有固定长度的输出,但加密长度随输入的长度而变化。
  3. 它不容易被迭代。真正正确的方法是使用带盐的哈希,但要迭代该函数几千次(即,哈希,然后再次哈希,然后再次哈希......)。这意味着验证密码仍然可以在一两秒内完成(取决于您散列的次数),这通常不会有问题;但破解起来要困难得多,因为你现在尝试的每个密码都需要经过数千次哈希处理。这里没有明显的方法来做到这一点,因为加密可能会增加长度(当您添加初始化向量等时)。

真的,当有一种可靠且完善的技术可以做得更好时,根本没有理由这样做。

关于security - 密码自加密可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536783/

相关文章:

apache - 忘记 Apache OFBIZ 管理员密码

php - 没有 PHP 经验的人应该使用像 CakePHP 或 Symfony 这样的框架吗?

security - session 和基于 token 的身份验证之间的技术差异

c - 在 "C"程序中,如何将十六进制值存储在字符串变量中?

javascript - 如何使用 greasemonkey 安全地存储密码?

azure - 用户旅程完成后B2C重定向

javascript - 解码这个奇怪的 Javascript

django - 在这种情况下,主机 header 是否可能中毒?

android - 直接使用从 keystore 加载的 SecretKey 时, key 用户未通过身份验证

java - 尝试创建一个简单的加密程序