1

我需要解密一些使用以下规格加密的数据(在 Android 上):

  • 具有 128 位密钥大小和 128 位块大小的 AES
  • 分组密码模式:CBC-CS1(带有密文窃取的 CBC,变体 1,在 [CBCCS] 中指定)

在互联网上没有找到太多信息,到目前为止我尝试过的所有 AES 解密方法都不起作用。

主要问题似乎是 CBC-CS1 的实现,是支持还是我应该自己实现?

谢谢, 德姆

4

1 回答 1

0

看来您应该可以根据需要使用new NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes)。一件事可能会有所作为:您应该直接将 AES 分组密码提供给它,例如:

AESFastEngine aes = new AESFastEngine();
NISTCTSBlockCipher aescbccts = new NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes);

CTSBlockCipher与预期的不同CBCBlockCipher(无论如何对于 CBC + CTS 操作)。

如果您确实喂它 CBC,那么您 - 够有趣的 - 再次以双倍 CBC = ECB 结束:

CTB_n = E(CTB_n-1 XOR CTB_n-1 XOR PTB_n) = E(PTB_n).

来自维基百科:

这里的编号取自 Dworkin,他描述了所有这些。第三种是最受欢迎的,由 Daemen 和 Schneier 描述;Meyer 描述了一个相关但不兼容的方案(关于位排序和密钥使用)。

我刚刚验证了 Bouncy 实现了 CS3。因此,您似乎应该能够使用CTSBlockCipher(正如 ArtjomB 建议的那样),但只有在交换(部分)最后一个和第一个到最后一个块之后。

或者,您可以简单地重写CTSBlockCipher,Bouncy Castle 有一个非常宽松的许可证。

于 2015-12-13T03:09:20.253 回答