سؤال

انا اكتب تنفيذ XXTEA خوارزمية التشفير الذي يعمل على "تيارات" ، أي يمكن استخدامها مثل:سرداب mykey < myfile > الإخراج.

واحدة من مستلزمات هو أنه لم يكن لديك الوصول إلى الملفات على الإطلاق (إلا يقرأ حجم ثابت كتلة حتى تجد EOF).الخوارزمية تحتاج أن البيانات بايت متعددة من 4 ، لذلك هناك حاجة إلى إضافة الحشو.

عادي نص حل جيد هو لوحة مع بالقيم الخالية في فك التشفير فقط تجاهل القيم الخالية ، ولكن نفس الاستراتيجية لا يمكن استخدام ثنائي تيارات (التي يمكن أن تحتوي جزءا لا يتجزأ من القيم الخالية).

لقد قرأت حلول مشتركة ، مثل الحشو مع عدد المفقودين حرف (لو يغيب 3 حرف ، ثم إلحاق 3, 3, 3 في النهاية) وغيرها, ولكن أتساءل:هناك أكثر أناقة الحل ؟

هل كانت مفيدة؟

المحلول

قراءة السؤال يبدو الجانب الأمني من هذه المسابقة.ببساطة لديك api التي يتوقع متعددة من 4 بايت كمدخل الذي لا يكون دائما.

إضافة ما يصل إلى 3 بايت على أي تيار ثنائي خطير إذا كنت لا يمكن أن تجعل ضمانات بأن تيار ثنائي لا الرعاية.إلحاق 0 إلى نهاية ملف exe لا يهم كما exe الملفات رؤوس تحديد ذات الصلة أحجام من جميع البتات المتبقية.إلحاق 0 إلى نهاية الملف pcx كسر كما pcx الملفات رأس يبدأ عدد معين من وحدات البايت من نهاية الملف.

لذلك حقا لديك أي خيار - هناك خيار من السحر الحشو بايت يمكنك استخدام هذا يضمن أن لا تحدث بشكل طبيعي في نهاية تيار ثنائي:لك يجب أن دائما إلحاق إضافي واحد على الأقل dword من المعلومات التي تصف بايت الحشو المستخدمة.

نصائح أخرى

اقرأ: http://msdn.microsoft.com/en-us/library/system.security.cryptography.paddingmode.aspx

يحتوي على قائمة بطرق الحشو الشائعة ، مثل:

PKCS7 - تتكون سلسلة الحشو PKCS #7 من سلسلة من البايتات ، كل منها يساوي إجمالي عدد بايت الحشو المضافة.

تتكون سلسلة الحشو ANSIX923 من سلسلة من البايتات المملوءة بالأصفار قبل الطول.

تتكون سلسلة الحشو ISO10126 من بيانات عشوائية قبل الطول.

أمثلة:

البيانات الخام: 01 01 01 01 01

PKCS #7: 01 01 01 01 01 03 03 03

Ansix923 01 01 01 01 01 00 00 03

ISO10126: 01 01 01 01 01 CD A9 03

تقرأ على نص مشفر سرقة. يمكن القول أنه أكثر أناقة من حشوة النص العادي. أيضًا ، أقترح استخدام حجم كتلة أكبر من 4 بايت - 64 بت من المحتمل أن يكون الحد الأدنى.

بالمعنى الدقيق للكلمة ، تعتبر التشفير بنفسك فكرة خطيرة ؛ من الصعب التغلب على الخوارزميات التي حاول مجتمع التشفير بأكمله وفشل في كسره. استمتع ، وفكر في القراءة هذه, ، أو على الأقل شيء من قسم "القراءة ذات الصلة" لشنير.

في الواقع أتوقع أن لا يحتاج تشفير تيار جيد إلى حشوة على الإطلاق. RC4 على سبيل المثال لا يحتاج إلى حشوة وهو مشفر دفق قوي للغاية. ومع ذلك ، يمكن أن تتعرض للهجوم إذا تمكن المهاجم من إطعام البيانات المختارة المختلفة إلى روتين التشفير ، والذي يستخدم دائمًا نفس المفتاح ، ولديه أيضًا الوصول إلى البيانات المشفرة. يمكن استخدام اختيار بيانات الإدخال الصحيحة وتحليل بيانات الإخراج لاستعادة مفتاح التشفير ، دون هجوم القوة الغاشمة ؛ لكن بخلاف ذلك RC4 آمن للغاية.

إذا كان يحتاج إلى حشو ، فهو لا يوجد دفق تشفير IMHO. كما لو كنت pad لتكون مضاعفة 4 بايت أو مضاعف 16 بايت ، ما هو الفرق الكبير؟ وإذا كان مبطنًا ليكون مضاعفًا من 16 بايت ، فيمكنك استخدام أي مشفر كتلة. في الواقع تشفير الخاص بك هو تشفير كتلة ، فهو يعمل فقط مع 4 بايت كتل. لقد كان مشفرًا دفقًا على نظام يكون فيه كل "رمز" 4 بايت (على سبيل المثال عندما يكون نص التشفير UTF-32 ، وفي هذه الحالة ستكون البيانات دائمًا مضاعفة 4 بالتأكيد ، وبالتالي لا يوجد أي حشوة أبدًا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top