J'ai l'intention d'utiliser TripleDES dans l'un de mes projets. Je faisais des expériences pour être à l'aise avec ça. Je comprends que la taille de bloc de triple DES est de 8 octets, donc je suppose que si donne 8 octets de données, je devrais obtenir 8 octets de données cryptées. Mais ce que je reçois est:Taille des données cryptées lors de l'utilisation de Triple DES
Input Size | Encrypted Size . | . . | . 6 bytes | 8 bytes 7 bytes | 8 bytes 8 bytes | 16 bytes 9 bytes | 16 bytes . | . . | .
Est-ce normal? Est-ce la façon dont il est censé fonctionner? Voici comment je suis en train d'utiliser le triple DES:
class TripleDESEncryption
{
private readonly TripleDESCryptoServiceProvider engine;
public TripleDESEncryption() : this (256) { }
public TripleDESEncryption (int keySizeInBits) {
engine = new TripleDESCryptoServiceProvider { KeySize = keySizeInBits };
engine.GenerateKey();
}
public byte[] Encrypt (byte[] plain) {
return engine.CreateEncryptor().TransformFinalBlock (plain, 0, plain.Length);
}
public byte[] Decrypt (byte[] encrypted) {
return engine.CreateDecryptor().TransformFinalBlock (encrypted, 0, encrypted.Length);
}
}
class Program
{
static readonly int MAX_TEXT_LENGTH = 128;
static void Main (string[] args) {
Console.WriteLine ("{0,10}{1,10}{2,10}{3,10}", "Algo", "Key Size", "Input Size", "Encrypted Size");
var tripleDES = new TripleDESEncryption();
var input = new List<byte>();
for (int i = 0; i <= MAX_TEXT_LENGTH; i++) {
var plain = input.ToArray();
var encrypted = tripleDES.Encrypt (plain);
Console.WriteLine ("{0,10}{1,10}{2,10}{3,10}", "Triple DES", keySize, input.Count, encrypted.Length);
input.Add (0x65);
}
Console.ReadLine();
}
}
Merci beaucoup. Votre solution a fonctionné. Je ne comprends tout simplement pas la mise en œuvre. Si le bloc donné est un multiple exact de blocksize, il ne doit rien bourrer. Je suppose que n'importe quel programmeur sain d'esprit le ferait. – Hemant
Un remplissage réversible doit ajouter des données au texte en clair pour communiquer comment il doit être supprimé. Il faudra donc étendre n * 8 octets à (n + 1) * 8 octets. –