在CBC模式下,我有两种加密和解密方法。我已经准备好验证我的 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。谁能告诉我这是否有问题?
这是针对单个数据块进行测试,而不是针对大量数据。