【问题标题】:Encrypting text file with AES-256 CBC使用 AES-256 CBC 加密文本文件
【发布时间】:2019-04-04 13:24:03
【问题描述】:

我一直在尝试利用自己的空闲时间学习 C++ 和计算机安全,并且一直在尝试一些 CTF 挑战。

挑战在于找出文本文件 (x.txt) 中的单词数 (N),并使用 N 作为密钥使用 AES-256 CBC 加密文本文件 (x.txt) 并输出包含加密内容的新文本文件 (y.txt)。

我从文本文件中获取字数没有问题,但我只是想知道是否有人知道如何执行所述加密?

为此,我一直在阅读有关 OpenSSL 的信息,但无法继续。我假设在这种情况下 IV 会为零?

提前致谢。

【问题讨论】:

  • “我一直在阅读有关 OpenSSL 的相关信息,但我无法继续前进” - 人们可能需要更多关于您遇到问题的详细信息。
  • 我找到的大部分信息都是关于命令行加密的,但我还没有找到任何关于如何在 C++ 程序中实现它的教程。

标签: c++ security encryption aes


【解决方案1】:

我假设在这种情况下 IV 会为零?

IV 或Initialization Vector 是加密的“种子”。需要这样才能使相似的明文在加密时看起来不相似。它意味着永远不会在不同的加密运行之间重复并且不是秘密的。因此,零 IV(或任何其他固定 IV)会破坏目的。

AES-CBC 的典型方法是在加密期间生成随机 IV 并将其与密文一起存储。然后在解密过程中读入它并用它来初始化解密器。

要了解有关要使用的 OpenSSL API 的更多信息,请参阅OpenSSL Wiki - Symmetric Encryption

【讨论】:

  • 通常情况下,IV 被添加到密文之前。由于 IV 大小是固定的,因此很容易从头开始提取,无需任何分隔符。
【解决方案2】:

我目前也在学习 AES。以下是我认为有用的一些资源:

如何进行 AES 加密:

归结为每轮 4 个步骤:

  1. 替换字节(使用 S-box)
  2. 移动行
  3. 混合列
  4. 添加圆键

Paar 教授有一个关于如何执行每一轮 AES 的非常好的视频。 Here is a link to his AES video。在学习加密方面,他的整个频道确实是一座金矿。注意:您需要对 S-box 进行硬编码或以某种方式包含它。

Paar 教授在视频中没有解释的一件事是密钥扩展(也就是如何获得每一轮密钥)。你可以找到一个key扩展的java实现on Professor Wagner's page here.重构成C++应该是比较直接的。只需记住包含圆形常量表即可。

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2020-08-20
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多