我一直在尝试在自己的空闲时间学习C++和计算机安全,我一直在尝试一些CTF挑战。
挑战是找出文本文件(x.txt)中的字数(N),并使用N作为密钥,使用AES-256CBC对文本文件(x.txt)进行加密,并输出包含加密内容的新文本文件(y.txt)。
我从文本文件中获取字数没有问题,但我想知道是否有人知道如何执行加密声明?
我一直在研究OpenSSL,但我不能继续下去。我假设在这种情况下IV应该是零?
提前谢谢。
发布于 2019-04-04 21:56:58
我假设IV在这种情况下是0?
?
IV或Initialization Vector是加密的“种子”。这是必需的,这样相似的明文在加密时看起来就不会相似。这意味着不会在不同的加密运行之间重复,并且不是秘密的。因此,零IV (或任何其他固定的IV)将无法实现此目的。
AES-CBC的典型方法是在加密期间生成随机IV,并将其与密文一起存储。然后在解密过程中读入并使用它来初始化解密器。
要了解有关要使用的OpenSSL API的更多信息,请参阅OpenSSL Wiki - Symmetric Encryption。
发布于 2019-04-04 22:13:16
我现在也在学习AES。下面是我发现的一些有用的资源:
如何执行AES加密:
它可以归结为每轮4步:
添加替换字节(使用S-box)
有一个非常好的视频,由Paar教授介绍如何执行每一轮AES。Here is a link to his AES video。在学习密码方面,他的整个频道真的是一座金矿。注意:您需要对S-box进行硬编码或以某种方式将其包括在内。
Paar教授在视频中没有解释的一件事是密钥扩展(也就是如何获得每轮密钥)。你可以找到一个java实现的键扩展on Professor Wagner's page here.,它重构成C++应该是相对简单的。只需记住包括圆形常量表格。
https://stackoverflow.com/questions/55517115
复制相似问题