当前位置: 首页 > 知识库问答 >
问题:

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

上官迪
2023-03-14

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

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

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

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

谢谢,戴姆

共有1个答案

陈允晨
2023-03-14

如果需要,似乎您应该能够使用新的网信封锁密码(网信封锁密码.CS1,aes)。有一件事可能会有所作为:您应该直接向它提供AES块密码,例如:

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

这与CTS块密码不同,后者似乎期望CBC块密码(无论如何用于CBC CTS操作)。

如果你真的给它喂了CBC,那么你——足够有趣——最终又得到了双CBC=ECB:

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

来自维基百科:

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

我刚刚验证了Bouncy实现了CS3。因此,看起来您应该能够使用< code > ctsbloccipher (正如ArtjomB所建议的),但只能在交换(部分)最后一个和倒数第一个块之后。

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

 类似资料:
  • 我使用的是128位的AES ALgo,带有CBC密码模式加密,下面是代码: 但这给了我一个警告,输出为: 警告:mcrypt_generic_init():密钥大小太大;提供的长度:64,最大:32 /var/www/cipher.php第10行警告:mcrypt_generic_init():密钥大小太大;提供的长度:64,最大:32 /var/www/cipher.php第14行加密:vM/X

  • 我在Minio中有一个加密对象,使用AES 128位CBC算法加密。 该对象非常大(约50 MB),因此我没有将其完全加载到内存中(这可能会导致内存不足异常),而是以1MB的块检索它。我需要在使用前解密它。 有没有可能用这种方式解密对象(一次1MB,整个对象一次性加密)?如果是,我该怎么做?我尝试解密16字节的块,产生以下错误: <code>javax.crypto。IllegalBlockSiz

  • 我只需要通过代码加密AES CBC 128位模式的字符串。我使用openssl库完成了这项工作,但无法获得正确的输出。 到目前为止,我已经完成了。 我的十六进制输出是:B0 15 751B50 80 D4 FF 81 68 146BB71B95 99 37 38 但正确的输出是:< code > 73 5C 04 F9 57 18 43 7C EE 68 27 59 2B 41 A8 DA (通过

  • 我用java编写了这段代码,以便解密密文。我有钥匙。对我来说,一切都是正确的,但我有我要解释的问题。 这是我的代码: 我收到以下错误: 出了什么问题?我知道这个问题在某种程度上与衬垫有关,但我不知道确切的解决方案。我只有一个密文IV和密钥。

  • 也许你能帮我。非常感谢!

  • 我最近在Java中使用了AES CBC 128算法来加密数据。现在我需要用PHP重建算法,但我不知道如何重建,因为互联网上的PHP算法返回不同的结果。也许你能帮我。 这是要加密的Java代码: 这是我的php代码: 当我从java加密加密数据时,此结果无法在Php解密上解密。 你们能帮我构建一个PHP脚本吗?它可以返回与java加密相同的结果?