ما هو مخطط ترميز النص الذي تستخدمه عندما يكون لديك بيانات ثنائية تحتاج إلى إرسالها عبر قناة ASCII؟
سؤال
إذا كان لديك بيانات ثنائية تحتاج إلى تشفيرها ، فما هو مخطط الترميز الذي تستخدمه؟
وأنا أعلم عن:
- ترميز السداسي. بسيط للغاية ، ولكن مطوّلة تمامًا ، يوسع بايت واحد إلى اثنين.
- قاعدة 64. الأكثر شيوعًا ، وليس مطوّلة للغاية ، يوسع ثلاثة بايت إلى أربعة.
- قاعدة 85. غير شائع ، أقل مطوّلة مرة أخرى ، يوسع أربعة بايت إلى خمسة.
هل هناك أي مخططات تشفير أخرى تستخدم؟ إذا كان الأمر كذلك ، فما هي المزايا والعيوب؟
تعديل: هذا مفيد ، على سبيل المثال ، عند محاولة تخزين البيانات التعسفية في ملف تعريف الارتباط. يمكن لملفات تعريف الارتباط تخزين النص فقط ، وليس البيانات التعسفية ، لذلك تحتاج إلى تحويله بطريقة أو بأخرى ، ويفضل أن يكون ذلك مع طريقة تحويله مرة أخرى. علاوة على ذلك ، افترض أنك تستخدم خادمًا عديمي الجنسية بحيث لا يمكنك حفظ الحالة على الخادم ووضع معرف في ملف تعريف الارتباط. بالطبع ، إذا قمت بذلك ، فستحتاج أيضًا إلى طريقة للتحقق من أن ما يعوده المستخدم إليك هو ما نقلته إلى المستخدم ، على سبيل المثال التوقيع.
أيضًا ، نظرًا لأن الإجماع الحالي هو أنه يجب عليك استخدام BASE64 لأنه واسع الانتشار ، سأشير أيضًا إلى أن هذا هو ما أستخدمه ... أنا فضولي فقط إذا استخدم أي شخص أي شيء آخر ، وإذا كان الأمر كذلك ، فلماذا.
تعديل: فقط في حالة تعثر شخص ما عبر هذا ، إذا كنت ترغب في استخدام BASE64 لتخزين البيانات في ملف تعريف الارتباط ، فأنت بحاجة إلى استخدام تطبيق BASE64 المعدل. يرى هذا الجواب لسبب.
المحلول
لترميز قيم ملفات تعريف الارتباط ، تحتاج إلى توخي الحذر. انظر الى هذا إجابة أقدم:
مع ملفات تعريف الارتباط 0 ، يجب ألا تحتوي القيم على مساحة بيضاء وأقواس وأقواس ، يساوي العلامات, ، فواصل ، اقتباسات مزدوجة ، مائلة ، علامات استفهام ، في العلامات ، الكولون ، والكولون. قد لا تتصرف القيم الفارغة بنفس الطريقة على جميع المتصفحات.
يمكن توليد ترميز BASE64 =
الرموز لبعض المدخلات ، وهذا من الناحية الفنية غير مسموح به في ملفات تعريف الارتباط (الإصدار 0 ملفات تعريف الارتباط ، على أي حال ، والتي هي الأكثر دعمًا على نطاق واسع). في الممارسة العملية ، أظن =
سوف تعمل في الواقع بشكل جيد ، ولكن ربما لا.
أود أن أقترح أن تكون متأكدًا تمامًا من أن الثنائي المشفر متوافق مع ملفات تعريف الارتباط ، ثم يكون ترميز السداسي الأساسي أكثر أمانًا (على سبيل المثال في جافا).
تعديل: كما أشار Paul بشكل مفيد ، هناك ملف نسخة معدلة من القاعدة 64 هذا هو "URL آمن" (وأفترض ، "ملف تعريف الارتباط آمن"). باستخدام نسخة معدلة من خوارزمية قياسية بدلاً من ذلك يقلل من سحرها ، ضع في اعتبارك.
تعديل: أشار shoosh إلى أن =
يستخدم فقط للدلالة على نهاية سلسلة Base64 ، بحيث يمكنك تقليم =
, ، قم بتعيين ملف تعريف الارتباط ، ثم Rattach =
مرة أخرى عندما تحتاج إلى فك تشفيره.
نصائح أخرى
BASE64 يفوز لأنه من الشائع لدرجة أنني لا داعي للقلق من أي وقت مضى بشأن تدحرج التشفير/فك التشفير الخاص بي. لم أواجه أي تطبيقات حيث كنت قلقًا بشأن توفير النطاق الترددي أو الفضاء في البيانات الثنائية المشفرة.
ذات مرة ، كان هناك UTF-7. تم إهماله رسميًا ، لكنه لا يزال يعمل كـ ACE (ترميز متوافق مع ASCII). الآن هناك IDN.
- uuencode شائع هو بعض الدوائر
- HTML و XML يشفر Unicode باستخدام هذا بناء الجملة
BASE64 هو المعيار الفعلي. استخدام أي شيء آخر يسأل عن المتاعب.