繁体   English   中英

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

[英]Android: decrypt AES with 128 bit key size and 128 bit block size - Block cipher mode: CBC-CS1

我需要解密一些数据(在Android上),这些数据已按照以下规范进行了加密:

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

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

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

谢谢Dem

如果您愿意,似乎应该可以使用new NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes) 一件事可能会有所作为:您应该直接将AES分组密码提供给它,例如:

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

这与CTSBlockCipher有所不同, CTSBlockCipher似乎期望CBCBlockCipher (无论如何都用于CBC + CTS操作)。

如果您确实输入了CBC,那么您-很有趣-最终又得到了两倍的CBC = ECB:

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

从WikiPedia:

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

我刚刚验证Bouncy实现了CS3。 因此,看来您应该能够使用CTSBlockCipher (如ArtjomB所建议),但仅在交换(部分)最后一个和第一个至最后一个块之后。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM