我在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;
}
加密器只是我在ECB表单中的AES类。因此,所有这些方法都应该为CBC带来额外的XOR。任何人都可以告诉我,这似乎是错的吗?
这是针对单个数据块进行测试,而不是针对大量数据。
答案 0 :(得分:0)
我解决了这个问题。这是一个问题,那里的加密有一个对我加密的对象数据的引用,而不仅仅是等于这些值。我为发布一个我正在制作的愚蠢错误的问题而道歉。谢谢你的评论。这是新的加密方法,如果有人关心:
public byte[,] Encrypt(byte[,] dataToEncrypt, byte[] givenKey, byte[] initializationVector)
{
//Setup
ECB encryptor = new ECB();
byte[,] cypherText = new byte[4,4];
//XOR the data with the IV
for (int row = 0; row < 4; row++)
{
cypherText[row, 0] = (byte)(dataToEncrypt[row, 0] ^ initializationVector[4 * row]);
cypherText[row, 1] = (byte)(dataToEncrypt[row, 1] ^ initializationVector[(4 * row) + 1]);
cypherText[row, 2] = (byte)(dataToEncrypt[row, 2] ^ initializationVector[(4 * row) + 2]);
cypherText[row, 3] = (byte)(dataToEncrypt[row, 3] ^ initializationVector[(4 * row) + 3]);
}
return encryptor.Encrypt(cypherText, givenKey);
}