1

次の仕様で暗号化された一部のデータ (Android で) を復号​​化する必要があります。

  • 128 ビットのキー サイズと 128 ビットのブロック サイズの AES
  • ブロック暗号モード: CBC-CS1 ([CBCCS] で指定されているように、暗号文を盗む CBC、バリアント 1)

インターネット上で多くの情報が見つかりませんでした。これまでに試した AES 復号化方法はすべて機能しません。

主な問題は CBC-CS1 の実装にあるようです。サポートされていますか、それとも自分で実装する必要がありますか?

ありがとう、デム

4

1 に答える 1

0

必要に応じて使用できるようにする必要がありnew NISTCTSBlockCipher(NISTCTSBlockCipher.CS1, aes)ます。おそらく違いを生んでいることが 1 つあります。AES ブロック暗号を直接フィードする必要があります。たとえば、次のようになります。

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

CTSBlockCipherこれは、期待しているように見えるものとは異なりますCBCBlockCipher(とにかくCBC + CTS操作の場合)。

CBC をフィードすると、面白いことに、CBC = ECB が再び 2 倍になります。

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

ウィキペディアから:

ここでの番号付けは、それらすべてを説明している Dworkin から取られています。3 つ目は最も人気があり、Daemen と Schneier によって説明されています。Meyer は、関連するが互換性のないスキームについて説明しています (ビット順序とキーの使用に関して)。

Bouncy が CS3 を実装していることを確認しました。したがって、(ArtjomBが示唆するように)使用できるはずですがCTSBlockCipher、(部分的な)最後と最初から最後のブロックを交換した後にのみ使用できます。

または、単純に を書き直すこともできCTSBlockCipherます。Bouncy Castle には非常に寛容なライセンスがあります。

于 2015-12-13T03:09:20.253 に答える