【问题标题】:AES 256 Encryption/Decryption initialization vector confusionAES 256 加密/解密初始化向量混淆
【发布时间】:2014-10-15 15:58:52
【问题描述】:

首先让我说我是加密领域的新手。话虽如此,我正在开发一个应用程序,需要将用户名、密码和全名(名字、中间名、姓氏)加密存储在数据库表中。我正在阅读一篇文章,IV 对于发生的每个加密应该是随机的,并且我可以将 IV 预先添加到密文中。

这是令人困惑的地方。如果我在字符串前面加上文本,我将如何解密字符串,除非我确切知道 IV 结束和密文开始在字符串中的哪个位置?另外,我读到我应该在实际加密之前通过附加或前置附加文本来加盐字符串。即,我创建的一些字符串并将其添加到明文中,我对加盐的理解是否正确?

如果我将加密的用户名和密码存储在数据库中,当我需要对用户进行身份验证时,我是否应该担心任何问题。我可以在用户输入字段后可靠地加密用户名和密码,然后将加密值与数据库中的加密列进行比较吗?这似乎是个问题,如果是,推荐的处理方法是什么?

【问题讨论】:

  • IV 将始终与块大小相同,是吗?因此,如果您在其前面添加密文的第一个块,则始终是 IV。对于 AES 256,应该是 32 字节,对吧?其他一切都是真正的密文。还是我缺少什么?
  • @TylerPeryea AES 的块大小始终为 128 位。只有密钥大小可以是 128、192 或 256 位。
  • 请注意这里搜索结果的前k页:google.com/#q=don%27t+implement+your+own+crypto 如果您对IV的了解最多的是一篇文章所说的,那么您不太可能建立一个安全的系统。这包括涉及存储用户密码、验证用户密码或存储其他敏感信息的任何组件。此外,你提出的每一个问题和你所做的假设都是错误的。平了。错误的。例如:您对加盐、IV 生成、加密内容、如何存储密码、如何验证密码的描述。都错了。

标签: encryption aes block-cipher


【解决方案1】:

长度取决于使用的加密算法。 AES 的 IV 总是 16 字节长,所以在解密时,你可以只取前 16 个字符作为 IV,然后在第 16 个字节之后开始解密。

是的,IV 就像盐,只是在我们进行散列时通常会提到盐,而不是加密。盐也是固定长度的。

如果您只需要对用户进行身份验证,哈希是在数据库中存储密码的首选方式。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多