我正在使用AES加密算法(Rijndael实现)。我正在使用MS Visual Studio 2008 IDE进行开发工作。我在调试和发布模式下可以看到一个奇怪的问题。当我在调试模式下加密字符串时,它会生成与释放模式不同的字节。但幸运的是,解密会产生相同的字符串。我在Mac上尝试过,它会再生成一个字节序列,但能够正确解密所有字节序列。
此问题是否与加密算法或调试/发布设置有关? 有没有解决方法可以避免这种情况?
此致 Devara Gudda
答案 0 :(得分:2)
AES是一个块密码。您可以使用它加密和解密固定大小为128位的块。为了加密和解密更长的序列,您通常使用某种“操作模式”和某种“填充方案”,这两种方案都可能涉及通过IV(初始化向量)和填充的一些randonmess。在那些情况下,由于涉及“随机性”,密码文本每次都会更长并且不同。实际上,相同的消息加密到不同的密文并不是一个坏的属性。你甚至需要它来保护自己免受某些攻击。
答案 1 :(得分:0)
您应验证“发布”和“调试”设置之间的差异,“配置属性 - > C / C ++ - >代码生成”中出现的大多数问题以及“配置属性”下的“字符集” - >一般“。
我有我的AES实现,它在VC2008的默认配置下编译得很好。
答案 2 :(得分:0)
您可能想要验证如何为纯文本/密文指定缓冲区大小。在调试版本中,编译器通常将缓冲区初始化为已知值(通常用于检测溢出错误)。例如,在VC ++ 2008 Express中,我发现char缓冲区在调试版本中被初始化为0xCD
。在发布版本中,当然没有这样的事情。我并不是说这是你观察到的原因 - 只是你可能要查看的东西。