我一直在尝试自己的业余时间学习C ++和计算机安全性,并且一直在尝试一些CTF挑战。
挑战在于找出文本文件(x.txt)中的单词数(N),并使用N作为密钥使用AES-256 CBC加密文本文件(x.txt)并输出具有加密内容的新文本文件(y.txt)。
我从文本文件中获取单词数没有问题,但是我只是想知道是否有人知道如何执行所述的加密?
为此,我一直在阅读OpenSSL,但是我无法继续进行下去。我认为在这种情况下IV将为零?
谢谢。
答案 0 :(得分:2)
我认为在这种情况下IV会为零吗?
IV或Initialization Vector是加密的“种子”。需要这样做,以便相似的明文在加密时看起来不会相似。它意味着永远不会在不同的加密运行之间重复,并且不是秘密。零IV(或任何其他固定IV)将无法达到目的。
使用AES-CBC的典型方法是在加密期间生成随机IV,并将其与密文一起存储。然后在 decryption 中将其读入并用于初始化解密器。
要了解有关要使用的OpenSSL API的更多信息,请参阅OpenSSL Wiki - Symmetric Encryption。
答案 1 :(得分:0)
我目前也在学习AES。以下是一些我认为有用的资源:
如何执行AES加密:
每轮归结为4个步骤:
Paar教授提供了一个非常好的视频,介绍如何执行每轮AES。 Here is a link to his AES video。在学习加密方面,他的整个渠道确实是金矿。注意:您将需要对S-box进行硬编码或以某种方式包含它。
Paar教授在视频中没有解释的一件事是密钥扩展(也就是如何获取每个回合密钥)。您可以找到密钥扩展on Professor Wagner's page here.的Java实现。将其重构为C ++应该相对简单。只需记住包括圆形常量表即可。