تجزئة MD5 و BASE64 الترميز
-
28-09-2019 - |
سؤال
إذا كان لديّ سلسلة أحرف 32 (علامة تجزئة MD5) وأشفرها باستخدام BASE64 ، فما هو طول الأسلوب المشفر؟
المحلول
قيمة MD5 دائما 22 (مفيدة) حرف طويل في BASE64 تدوين. ستقوم العديد من خوارزميات BASE64 أيضًا بإلحاق أحرف 2 من الحشو عند ترميز تجزئة MD5 ، مما يصل إلى إجمالي 24 حرفًا. لا يضيف الحشو أي معلومات مفيدة ويمكن التخلص منها. فقط أول 22 حرفًا مهمًا.
هنا لماذا:
تجزئة MD5 هي قيمة 128 بت. تحتوي كل حرف في سلسلة BASE64 على 6 بتات من المعلومات ، لأن هناك 64 قيمًا محتملة للشخصية ، ويستغرق الأمر 6 سلطات من 2 للوصول إلى 64. مع 6 بتات من المعلومات في كل حرف ، يحتوي 21 حرفًا على 126 بت من المعلومات ، ويحتوي 22 حرفًا على 132 بت من المعلومات. نظرًا لأن 128 بت لا يمكن أن تتناسب مع 21 حرفًا ولكنها تتناسب مع 22 حرفًا (مع مساحة صغيرة لتجنيبها) ، سيتم دائمًا تمثيل قيمة 128 بت كـ 22 حرفًا في Base64.
ملاحظة على الحشو:
لقد ذكرت أعلاه أن العديد من خوارزميات ترميز BASE64 تضيف بضعة أحرف من الحشو عند ترميز قيمة MD5. وذلك لأن BASE64 يمثل 3 بايت من المعلومات ك 4 أحرف. نظرًا لأن MD5 يحتوي على 16 بايت من المعلومات ، فإن العديد من خوارزميات ترميز BASE64 "==" لتعيين أن مدخلات 16 بايت كانت 2 بايت أقل من المضاعف التالي من 3 ، والتي كانت ستكون 18 بايت. هذه العلامات المتساوية 2 لا تضيف أي معلومات على الإطلاق إلى السلسلة ، ويمكن تجاهلها عند التخزين.
نصائح أخرى
حسب http://en.wikipedia.org/wiki/base64
"لاحظ أنه بالنظر إلى إدخال بايت n ، سيكون الإخراج (n + 2 - ((n + 2) ٪ 3)) / 3 * 4 بايت ، والذي يتقارب إلى n * 4/3 أو 1.3333n "
لذلك ، سيكون ((32 + 2 - (32 + 2) ٪ 3)) / 3 * 4 = 34 - (34 ٪ 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 *4 = 44 حرفًا.
يمكنك دائمًا استخراجه في شكل ثنائي خام (128 بت) وترميزه مباشرة في القاعدة 64 ، مما يعني تحويل 16 بايت بدلاً من 32 ، والذي يصبح 24 بايت عند ترميز القاعدة 64.