AES CBC不能产生正确的矢量
本文关键字:CBC 不能 AES | 更新日期: 2023-09-27 18:14:25
我在CBC模式下有两种加密和解密方法。我已经验证了我的欧洲央行方法,它们运行正常。我的问题是,当我用测试向量在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取额外的异或值。谁能告诉我,如果这看起来是错的吗?
这是用于测试的单个数据块,而不是用于大量数据。
我修复了这个问题。这是一个问题,上面的加密有一个对我正在加密的对象数据的引用,而不仅仅是等于这些值。我为自己犯的一个愚蠢的错误而道歉。谢谢你的评论。下面是新的加密方法,以防有人关心:
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);
}