ما هو مخطط ترميز النص الذي تستخدمه عندما يكون لديك بيانات ثنائية تحتاج إلى إرسالها عبر قناة ASCII؟

StackOverflow https://stackoverflow.com/questions/2090009

  •  21-09-2019
  •  | 
  •  

سؤال

إذا كان لديك بيانات ثنائية تحتاج إلى تشفيرها ، فما هو مخطط الترميز الذي تستخدمه؟

وأنا أعلم عن:

  • ترميز السداسي. بسيط للغاية ، ولكن مطوّلة تمامًا ، يوسع بايت واحد إلى اثنين.
  • قاعدة 64. الأكثر شيوعًا ، وليس مطوّلة للغاية ، يوسع ثلاثة بايت إلى أربعة.
  • قاعدة 85. غير شائع ، أقل مطوّلة مرة أخرى ، يوسع أربعة بايت إلى خمسة.

هل هناك أي مخططات تشفير أخرى تستخدم؟ إذا كان الأمر كذلك ، فما هي المزايا والعيوب؟

تعديل: هذا مفيد ، على سبيل المثال ، عند محاولة تخزين البيانات التعسفية في ملف تعريف الارتباط. يمكن لملفات تعريف الارتباط تخزين النص فقط ، وليس البيانات التعسفية ، لذلك تحتاج إلى تحويله بطريقة أو بأخرى ، ويفضل أن يكون ذلك مع طريقة تحويله مرة أخرى. علاوة على ذلك ، افترض أنك تستخدم خادمًا عديمي الجنسية بحيث لا يمكنك حفظ الحالة على الخادم ووضع معرف في ملف تعريف الارتباط. بالطبع ، إذا قمت بذلك ، فستحتاج أيضًا إلى طريقة للتحقق من أن ما يعوده المستخدم إليك هو ما نقلته إلى المستخدم ، على سبيل المثال التوقيع.

أيضًا ، نظرًا لأن الإجماع الحالي هو أنه يجب عليك استخدام BASE64 لأنه واسع الانتشار ، سأشير أيضًا إلى أن هذا هو ما أستخدمه ... أنا فضولي فقط إذا استخدم أي شخص أي شيء آخر ، وإذا كان الأمر كذلك ، فلماذا.

تعديل: فقط في حالة تعثر شخص ما عبر هذا ، إذا كنت ترغب في استخدام BASE64 لتخزين البيانات في ملف تعريف الارتباط ، فأنت بحاجة إلى استخدام تطبيق BASE64 المعدل. يرى هذا الجواب لسبب.

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

المحلول

لترميز قيم ملفات تعريف الارتباط ، تحتاج إلى توخي الحذر. انظر الى هذا إجابة أقدم:

مع ملفات تعريف الارتباط 0 ، يجب ألا تحتوي القيم على مساحة بيضاء وأقواس وأقواس ، يساوي العلامات, ، فواصل ، اقتباسات مزدوجة ، مائلة ، علامات استفهام ، في العلامات ، الكولون ، والكولون. قد لا تتصرف القيم الفارغة بنفس الطريقة على جميع المتصفحات.

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

أود أن أقترح أن تكون متأكدًا تمامًا من أن الثنائي المشفر متوافق مع ملفات تعريف الارتباط ، ثم يكون ترميز السداسي الأساسي أكثر أمانًا (على سبيل المثال في جافا).

تعديل: كما أشار Paul بشكل مفيد ، هناك ملف نسخة معدلة من القاعدة 64 هذا هو "URL آمن" (وأفترض ، "ملف تعريف الارتباط آمن"). باستخدام نسخة معدلة من خوارزمية قياسية بدلاً من ذلك يقلل من سحرها ، ضع في اعتبارك.

تعديل: أشار shoosh إلى أن = يستخدم فقط للدلالة على نهاية سلسلة Base64 ، بحيث يمكنك تقليم =, ، قم بتعيين ملف تعريف الارتباط ، ثم Rattach = مرة أخرى عندما تحتاج إلى فك تشفيره.

نصائح أخرى

BASE64 يفوز لأنه من الشائع لدرجة أنني لا داعي للقلق من أي وقت مضى بشأن تدحرج التشفير/فك التشفير الخاص بي. لم أواجه أي تطبيقات حيث كنت قلقًا بشأن توفير النطاق الترددي أو الفضاء في البيانات الثنائية المشفرة.

ذات مرة ، كان هناك UTF-7. تم إهماله رسميًا ، لكنه لا يزال يعمل كـ ACE (ترميز متوافق مع ASCII). الآن هناك IDN.

BASE64 هو المعيار الفعلي. استخدام أي شيء آخر يسأل عن المتاعب.

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