CBC モードでの暗号化と復号化には 2 つの方法があります。ECB メソッドをすべて検証する準備ができており、正しく機能しています。私の問題は、テスト ベクトルを使用して CBC で暗号化をテストすると、それらに合格することです。そして、同じベクトルで CBC 復号化をテストして、逆方向に進むことができることを確認すると、それらのテストにも合格しました。しかし、暗号化から復号化に移ると、同じベクトルは返されません。これは本当に意味がありません。
public byte[,] Encrypt(byte[,] dataToEncrypt, byte[] givenKey, byte[] initializationVector)
{
//XOR the data with the IV
for (int row = 0; row < 4; row++)
{
dataToEncrypt[row,0] ^= initializationVector[4*row];
dataToEncrypt[row, 1] ^= initializationVector[(4 * row) + 1];
dataToEncrypt[row, 2] ^= initializationVector[(4 * row) + 2];
dataToEncrypt[row, 3] ^= initializationVector[(4 * row) + 3];
}
ECB encryptor = new ECB();
return encryptor.Encrypt(dataToEncrypt, givenKey);
}
public byte[,] Decrypt(byte[,] dataToDecrypt, byte[] givenKey, byte[] initializationVector)
{
ECB encryptor = new ECB();
byte[,] plainText = encryptor.Decrypt(dataToDecrypt, givenKey);
for (int row = 0; row < 4; row++)
{
plainText[row, 0] ^= initializationVector[4 * row];
plainText[row, 1] ^= initializationVector[(4 * row) + 1];
plainText[row, 2] ^= initializationVector[(4 * row) + 2];
plainText[row, 3] ^= initializationVector[(4 * row) + 3];
}
return plainText;
}
Encryptor は、ECB 形式の AES の私のクラスです。したがって、これらのメソッドはすべて、CBC の追加の XOR を取り込むことになっています。これが何か間違っているように思われる場合は、誰か教えてもらえますか?
これは、大量のデータではなく、テスト用の 1 つのデータ ブロック用です。