2

.NETプラットフォームで記述されたリモートシステムと相互運用するには、PHPでAES CTSモード(暗号文の盗用、AES-XTSと呼ばれることもあります)でデータを暗号化および復号化する必要があります。.NET 4では、このモードはネイティブでサポートされています

PHPの場合、マニュアルに基づいて解決策を見つけることができません。mcryptはこのモードをサポートしていないようです。

プレーンCBCとCBC-CTSの違いを誰か説明してもらえますか?既存のモジュール/ライブラリを使用して、後者をPHPで機能させることは可能ですか?

4

2 に答える 2

1

これは、ウィキペディアの記事からのステップであり、

  1. LDn =復号化(K、Cn-1)。IVとしてゼロを使用して、最後から2番目の暗号文ブロック(最後から2番目の128ビット/ 16バイトチャンクチャンク)を復号化します。

    これは、標準のPHPmcrypt関数を使用して行うことができます。

    $ second_to_last_cipher = array_slice($ your_cipher_text_byte_array、count($ your_cipher_text_byte_array)-32,16)

    nullIvでmcrypt_decryptに

    $ second_to_last_clear = mcrypt_decrypt "MCRYPT_RIJNDAEL_128"、$ key、$ second_to_last_ciphe)

  2. Cn = Cn || テール(Dn、B-M)。最後から2番目の暗号文ブロックのブロック暗号復号化の最後のB-Mビットを使用して、暗号文をブロックサイズの最も近い倍数にパディングします。

    復号化した値の最後のnバイトを暗号文の最後のブロックにコピーします。

    $ n = 16-($ second_to_last_clear%16)

    次に、配列コピーを使用してデータをコピーします

  3. 最後の2つの暗号文ブロックを交換します。

    暗号文配列の最後のセルと最後から2番目のセルの内容を入れ替えるだけです。

  4. 最後のブロックまで、標準のCBCモードを使用して暗号文を復号化します。

    標準の復号化呼び出しを行います。

  5. 排他的論理和-最後の暗号文(ステップ1ですでに復号化されている)と最後から2番目の暗号文。

    自明。

  6. 平文を元の暗号文の長さに切り捨てます。
于 2012-05-02T22:09:52.063 に答える