我需要解密一些使用以下规格加密的数据(在 Android 上):
- 具有 128 位密钥大小和 128 位块大小的 AES
- 分组密码模式:CBC-CS1(带有密文窃取的 CBC,变体 1,在 [CBCCS] 中指定)
在互联网上没有找到太多信息,到目前为止我尝试过的所有 AES 解密方法都不起作用。
主要问题似乎是 CBC-CS1 的实现,是支持还是我应该自己实现?
谢谢, 德姆
我需要解密一些使用以下规格加密的数据(在 Android 上):
在互联网上没有找到太多信息,到目前为止我尝试过的所有 AES 解密方法都不起作用。
主要问题似乎是 CBC-CS1 的实现,是支持还是我应该自己实现?
谢谢, 德姆
看来您应该可以根据需要使用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 有一个非常宽松的许可证。