إنشاء بايتات عشوائية لمفتاح TripleDES C#
سؤال
أحتاج إلى إنشاء مجموعة بايت لتشفير TripleDES.لا أريد أن أستخدم .generateKey()
لأنني بحاجة إلى معرفة البايتات الموجودة في المفتاح لتمريرها إلى تطبيق آخر.
شكرا على الردود لكن نسيت أن أذكر شيئا واحدا:يجب أن تكون البايتات تكافؤًا فرديًا.وإلا فلن أستطيع إنشاء مفتاح TripleDES منهم.لست على دراية بالتكافؤ الفردي، لذا أعتقد أنه يتعين علي إنشاء فحص بايت إذا كان به تكافؤ فردي أم لا؛فإذا كان يضعه في المصفوفة، وإلا فلا.
المحلول
إذا كنت بحاجة إلى التأكد من التكافؤ الفردي، عليك أن تحسبه بنفسك.هذا يجب أن يفعل:
var rng = new RNGCryptoServiceProvider();
var key = new byte[24];
rng.GetBytes(key);
for(var i = 0; i < key.Length; ++i)
{
int keyByte = key[i] & 0xFE;
var parity = 0;
for (var b = keyByte; b != 0; b >>= 1) parity ^= b & 1;
key[i] = (byte)(keyByte | (parity == 0 ? 1 : 0));
}
return key;
نصائح أخرى
ماذا عن:
RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] key = new byte[24]; // For a 192-bit key
rng.GetBytes(key);
tripleDes.Key = key;
لاحظ أن RandomNumberGenerator
مناسب للعمل المشفر (فيما يتعلق بالبيانات العشوائية الآمنة إلى حد معقول والتي يصعب التنبؤ بها)، في حين أن System.Random
ليس كذلك.
لكن ...ما هي المشكلة مع فقط:
TripleDES provider = TripleDES.Create();
byte[] key = provider.Key;
هناك يمكنك الحصول على المفتاح الخاص بك الذي يستخدمه en- وفك التشفير الذي تم إنشاؤه باستخدام هذا المثيل.
لاحظ أن الإجابات الأخرى تفتقر إلى أ TripleDES.IsWeakKey
.
ال احصل على بايت تقوم الطريقة بإرجاع تسلسل قوي من القيم المشفرة:
var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
byte [] barr = new byte[128];
rng.GetBytes(barr);
foreach (var b in barr)
{
Console.WriteLine(b);
}
ماذا عن Random.NextBytes()
مزيد من المعلومات هنا.