J'essaie de chiffrer mes données avec l'algorithme AES en mode CBC. Pour cette raison, j'utilise la bibliothèque .Net 'Bouncy Castle'. Je n'ai pas de connaissances en cryptographie, j'essaie donc de l'utiliser de manière simple. Voici mon code de cryptage
public byte[] encrypt(byte[] key, byte[] iv,byte[] data)
{
IBlockCipher engine=new AesFastEngine();
KeyParameter keyParam = new KeyParameter(key);
CbcBlockCipher cipher = new CbcBlockCipher(engine);
ICipherParameters parameters = new ParametersWithIV(keyParam, iv);
byte[] output=new byte[16+data.Length];
cipher.Init(true, parameters);
cipher.ProcessBlock(data, 0, output, data.Length);
//process output
byte[] cipherArray = new byte[data.Length];
/*
int k=0;
for (int i = 0; i < output.Length; i++)
{
if (output[i]!= 0)
{
cipherArray[k++] = output[i];
}
}
*/
return cipherArray;
}
Lorsque j'essaie une entrée qui n'est pas un multiplicateur de 16, j'obtiens une exception. Lorsque je complète le tableau à droite avec un nombre de (16-length%16) avec des zéros à gauche, je peux obtenir un résultat. Mais ce résultat me pose également un problème. Il me donne un résultat comme celui-ci :
[0][0][0][0[111][22][33][44][66][77][33][12][32][23][0][0][0][0][0]
des zéros à gauche et à droite.
Je pensais que c'était peut-être à cause de mon utilisation de ProcessBlock(data, 0, output, data.Length)
fonction. Je l'utilise en supposant que la sortie sera mon texte chiffré, mais il semble que la sortie devrait être plus longue que la longueur d'entrée. Comme je n'ai pas de documentation sur cette fonction, je l'utilise peut-être de manière incorrecte. Toute aide serait appréciée