我使用AES加密算法(Rijndael算法实现)。 我使用微软的Visual Studio 2008的IDE我的开发工作。 我可以看到我的调试和发布模式一个奇怪的问题。 当我加密在调试模式字符串,产生比发行模式不同字节。 但幸运的解密将导致相同的字符串。 我在Mac的尝试,它会产生一个更字节序列,但能正确解密所有字节序列。
是与加密算法或调试/发布设置这个问题? 有没有什么解决办法避免这种情况?
问候Devara Gudda
我使用AES加密算法(Rijndael算法实现)。 我使用微软的Visual Studio 2008的IDE我的开发工作。 我可以看到我的调试和发布模式一个奇怪的问题。 当我加密在调试模式字符串,产生比发行模式不同字节。 但幸运的解密将导致相同的字符串。 我在Mac的尝试,它会产生一个更字节序列,但能正确解密所有字节序列。
是与加密算法或调试/发布设置这个问题? 有没有什么解决办法避免这种情况?
问候Devara Gudda
AES是块密码。 您可以加密和解密与它128位的固定大小的块。 加密和解密更长的序列通常使用一定的“操作模式”和一定的“填充方案”其中两个可能涉及通过IV(初始化矢量)和填充一些randonmess。 在这种情况下,密文会有点长,每次都不同,由于所涉及的“随机性”。 其实,这并不是说相同的消息加密不同的密文不好的特性。 你甚至需要用它来保护自己免受某些攻击。
您应该验证您的“释放”和“调试”设置之间的差异,最多的问题在occour“ - > C / C ++ - 配置属性>代码生成”,也是“字符集”下的“配置属性 - >常规”。
我有我的执行AES的,它在VC2008的两个默认配置编译罚款。
您可能需要验证您是如何指定的明文/密文缓冲区的大小。 在调试版本,编译器通常初始化缓冲器为已知值(检测溢出错误通常)。 在VC ++ 2008 Express的情况下,我发现,焦炭缓冲区被初始化为0xCD
在调试版本。 在发布版本,当然,没有这样的事做。 我不是说这是给你的观察是什么原因 - 只是你可能要检查出来的东西。