Android:使用128位密钥大小和128位块大小解密AES - 分组密码模式:CBC-CS1

时间:2015-12-11 10:11:25

标签: java android cryptography aes cbc-mode

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

  • 具有128位密钥大小和128位块大小的AES
  • 分组密码模式:CBC-CS1(密文窃取的CBC,变量1,如[CBCCS]中所述)

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

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

谢谢, DEM

1 个答案:

答案 0 :(得分:0)

如果您愿意,您似乎应该可以使用NSFetchedResultsController。有一件事可能有所不同:你应该直接给它提供AES分组密码,例如:

new NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes)

AESFastEngine aes = new AESFastEngine(); NISTCTSBlockCipher aescbccts = new NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes); 不同,似乎期待CTSBlockCipher(无论如何都是CBC + CTS操作)。

如果你确实喂了它CBC,那么你 - 足够有趣 - 最终再次获得双CBC = ECB:

CBCBlockCipher

来自WikiPedia:

  

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

我刚刚确认Bouncy实施了CS3。所以看起来你应该可以使用CTB_n = E(CTB_n-1 XOR CTB_n-1 XOR PTB_n) = E(PTB_n). (如ArtjomB建议的那样),但只能在交换(部分)最后一个和第一个到最后一个块之后。

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