حجم البيانات المشفرة أثناء استخدام Triple Des
-
12-09-2019 - |
سؤال
أنوي استخدام ثلاث مرات في أحد مشروعي. كنت أفعل بعض التجارب مريحة معها. أفهم حجم كتلة Triple des هو 8 بايت حتى أفترض أنه إذا أعط 8 بايت من البيانات، يجب أن أحصل على 8 بايت من البيانات المشفرة. ولكن ما أحصل عليه هو:
حجم الإدخال |. حجم مشفرة. | وبعد وبعد | وبعد 6 بايت | 8 بايت 7 بايت | 8 بايت 8 بايت | 16 بايت 9 بايت | 16 بايت. | وبعد وبعد | وبعد
هل هذا طبيعي؟ هل هي الطريقة التي من المفترض أن تعمل بها. إليكم كيف أحاول استخدام 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 ();
}
}
المحلول
tripledescryptoserviceprovids الإعدادات الافتراضية PKCS7-Madding.. وبعد هذه الوسادة أي رسالة إلى المضاعف التالي من حجم الكتلة.
لتجنب استخدام الحشو، فقط اضبط Padding
بروبيرتي إلى PaddingMode.None
new TripleDESCryptoServiceProvider {
KeySize = keySizeInBits,
Padding = PaddingMode.None
};
لا تنتمي إلى StackOverflow