我需要解密一些使用以下规范加密的数据(在Android上):
在Internet上找不到太多信息,到目前为止我尝试过的所有AES解密方法都不起作用。
主要问题似乎是CBC-CS1的实施,它是支持还是我应该自己实现?
谢谢, DEM
答案 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有一个非常宽松的许可证。