سؤال

لقد سمعت أشخاصًا يتحدثون عن "الترميز الأساسي 64" هنا وهناك.ما هو استخدامه ل؟

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

المحلول

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

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

لماذا 64؟
لأنه يمكنك بشكل عام الاعتماد على نفس الأحرف الـ 64 الموجودة في العديد من مجموعات الأحرف، ويمكنك أن تكون واثقًا بشكل معقول من أن بياناتك ستنتهي على الجانب الآخر من السلك دون تلف.

نصائح أخرى

وانها في الاساس وسيلة لترميز البيانات الثنائية التعسفي في نص ASCII. يستغرق 4 شخصيات في 3 بايت من البيانات، بالإضافة إلى يحتمل قليلا من الحشو في نهاية المطاف.

وأساسا كل 6 بت من المدخلات يتم ترميز في الأبجدية 64 حرفا. يستخدم "القياسية" الأبجدية A-Z، a-z و0-9 و+ و/، مع = كحرف الحشو. هناك متغيرات-URL آمن.

ويكيبيديا هو مصدر جيد إلى حد معقول من مزيد من المعلومات.

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

http://en.wikipedia.org/wiki/Base64

إنه تشفير نصي للبيانات الثنائية حيث لا يحتوي النص الناتج على أي شيء سوى الحروف والأرقام والرموز "+" و"/" و"=".إنها طريقة ملائمة لتخزين/نقل البيانات الثنائية عبر الوسائط المستخدمة خصيصًا للبيانات النصية.

لكن لماذا Base-64؟البديلان لتحويل البيانات الثنائية إلى نص يتبادر إلى الذهن على الفور هما:

  1. عدد عشري:تخزين القيمة العشرية لكل بايت في ثلاثة أرقام:045112101037 الخ.حيث يتم تمثيل كل بايت بـ 3 بايت.تتضخم البيانات ثلاثة أضعاف.
  2. السداسي عشري:تخزين البايتات كأزواج سداسية عشرية:التيار المتناوب 47 0D 1A إلخ.حيث يتم تمثيل كل بايت بـ 2 بايت.تتضخم البيانات بشكل مزدوج.

يقوم Base-64 بتعيين 3 بايت (8 × 3 = 24 بت) في 4 أحرف تمتد إلى 6 بت (6 × 4 = 24 بت).تبدو النتيجة مثل "TWFuIGlzIGRpc3Rpb...".وبالتالي فإن الانتفاخ هو مجرد 4/3 = 1.3333333 مرة الأصلي.

وبصرف النظر عن ما قيل بالفعل، هناك استخدامان شائعان جدًا لم يتم إدراجهما

التجزئة:

التجزئة هي دالات أحادية الاتجاه تعمل على تحويل كتلة من البايتات إلى كتلة أخرى من البايتات ذات حجم ثابت مثل 128 بت أو 256 بت (SHA/MD5).يؤدي تحويل البايتات الناتجة إلى Base64 إلى تسهيل عرض التجزئة خاصةً عند مقارنة المجموع الاختباري للتحقق من التكامل.غالبًا ما يتم رؤية التجزئة في Base64 لدرجة أن العديد من الأشخاص يخطئون في Base64 نفسه على أنه تجزئة.

التشفير:

نظرًا لأن مفتاح التشفير لا يجب أن يكون نصًا بل بايتات خام، فمن الضروري أحيانًا تخزينه في ملف أو قاعدة بيانات، وهو ما يكون Base64 مفيدًا له.نفس الشيء مع البايتات المشفرة الناتجة.

لاحظ أنه على الرغم من استخدام Base64 غالبًا في التشفير، إلا أنه ليس آلية أمان.يمكن لأي شخص تحويل سلسلة Base64 مرة أخرى إلى وحدات البايت الأصلية الخاصة بها، لذلك لا ينبغي استخدامها كوسيلة لحماية البيانات، بل كتنسيق لعرض أو تخزين وحدات البايت الأولية بسهولة أكبر.

الشهادات

شهادات x509 بتنسيق PEM مشفرة بالأساس 64. http://how2ssl.com/articles/working_with_pem_files/

من http://en.wikipedia.org/wiki/Base64

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

يمكن استخدام Base64 في مجموعة متنوعة من السياقات:

  • يستخدم Evolution وThunderbird Base64 للتعتيم على كلمات مرور البريد الإلكتروني[1]
  • يمكن استخدام Base64 لنقل وتخزين النص الذي قد يتسبب في حدوث تصادم محدد
  • غالبًا ما يُستخدم Base64 كاختصار سريع ولكن غير آمن لإخفاء الأسرار دون تكبد تكاليف إدارة مفاتيح التشفير

  • يستخدم مرسوم البريد العشوائي BASE64 للتهرب من أدوات مضادة للملاحظة الأساسية ، والتي غالبًا ما لا فك تشفير BASE64 وبالتالي لا يمكنهم اكتشاف الكلمات الرئيسية في الرسائل المشفرة.

  • يتم استخدام Base64 لترميز سلاسل الأحرف في ملفات LDIF
  • يتم استخدام Base64 أحيانًا لتضمين البيانات الثنائية في ملف XML، باستخدام بناء جملة مشابه لـ ......على سبيل المثالFirefox bookmarks.html.
  • يتم استخدام BASE64 أيضًا عند التواصل مع أجهزة طباعة التوقيع المالية الحكومية (عادةً ، على المنافذ التسلسلية أو المتوازية) لتقليل التأخير عند نقل أحرف الإيصال للتوقيع.
  • يتم استخدام Base64 لتشفير الملفات الثنائية مثل الصور داخل البرامج النصية، لتجنب الاعتماد على الملفات الخارجية.
  • يمكن استخدامها لتضمين بيانات الصورة الأولية في خاصية CSS مثل صورة الخلفية.

في الأيام الأولى من أجهزة الكمبيوتر، عندما كان خط الهاتف الاتصال بين النظام لا يمكن الاعتماد عليها بشكل خاص، تم استخدام طريقة سريعة وقذرة للتحقق من سلامة البيانات: "بت التماثل". في هذه الطريقة، فإن كل بايت تنتقل ديك 7-بت من البيانات، وان 8 يكون 1 أو 0، لإجبار عدد من 1 بت في البايت لتكون أكبر.

وبالتالي سوف transmited 0x01 0x81 كما. سوف يكون 0x02 0x82. سوف تظل 0x03 0x03 الخ.

لتعزيز هذا النظام، عندما تم تعريف مجموعة أحرف ASCII، تم تعيين فقط 00-7F حرفا. (لا تزال حتى اليوم، كل الحروف المحددة في نطاق 80 FF هي غير القياسية)

والعديد من الموجهات من اليوم وضعت الاختيار التكافؤ والترجمة بايت في الأجهزة، مما اضطر أجهزة الكمبيوتر التي تعلق عليها للتعامل بصرامة مع البيانات 7 بت. هذا مرفقات قوة البريد الإلكتروني (وجميع البيانات الأخرى، وهذا هو السبب HTTP و SMTP البروتوكولات القائمة على النص)، ليكون تحويل إلى تنسيق نصي فقط.

ونجا عدد قليل من أجهزة التوجيه في 90S. أشك بشدة أي منهم تستخدم حتى اليوم.

وبعض بروتوكولات النقل تسمح فقط الأحرف حرفي رقمي لإرسالها. ولكم أن تتخيلوا الحالة التي يتم فيها استخدام أحرف التحكم لتحريك إجراءات خاصة و / أو التي تدعم فقط بعرض بعض الشيء محدود لكل حرف. باستخدام Base64 تحول أي مدخلات الترميز يستخدم فقط أحرف أبجدية رقمية، +، / و= باعتباره الحشو الحرف.

يعد استخدام Base64 الذي سأصفه هنا بمثابة اختراق إلى حد ما.لذا، إذا كنت لا تحب الاختراقات، من فضلك لا تستمر.

لقد واجهت مشكلة عندما اكتشفت أن utf8 الخاص بـ MySQL لا يدعم أحرف Unicode ذات 4 بايت لأنه يستخدم إصدار utf8 ذو 3 بايت.إذن ما الذي فعلته لدعم الكود الموحد الكامل ذو 4 بايت عبر utf8 الخاص بـ MySQL؟حسنًا، يقوم Base64 بتشفير السلاسل عند تخزينها في قاعدة البيانات وفك تشفير Base64 عند الاسترجاع.

نظرًا لأن تشفير وفك تشفير Base64 سريع جدًا، فقد عمل ما سبق بشكل مثالي.

لديك النقاط التالية التي يجب مراعاتها:

  • يستخدم ترميز Base64 سعة تخزينية أكبر بنسبة 33%

  • لن تكون السلاسل المخزنة في قاعدة البيانات قابلة للقراءة بواسطة الإنسان (يمكنك بيع ذلك كميزة تستخدم فيها سلاسل قاعدة البيانات شكلاً أساسيًا من التشفير).

يمكنك استخدام الطريقة المذكورة أعلاه لأي محرك تخزين لا يدعم يونيكود.

وانها تستخدم لتحويل البيانات الثنائية التعسفي إلى نص ASCII.

وعلى سبيل المثال، يتم إرسال مرفقات البريد الإلكتروني هذا الطريق.

وأنا استخدامها من الناحية العملية عندما نقل الكائنات الثنائية الكبيرة (صور) عبر خدمات الويب. حتى عندما أنا اختبار خدمة ويب C # باستخدام برنامج نصي بيثون، الكائن ثنائي يمكن صوغه مع القليل من السحر.

[في بيثون]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

و"تستخدم برامج ترميز Base64 عادة عندما يكون هناك حاجة لترميز البيانات الثنائية التي يحتاج خزنها ونقلها عبر وسائل الإعلام التي تم تصميمها للتعامل مع البيانات النصية. هذا هو التأكد من أن البيانات لا تزال سليمة دون تعديل أثناء النقل "(ويكي، 2017)

وعلى سبيل المثال يمكن أن تكون على النحو التالي: لديك خدمة الويب التي تقبل حرف ASCII فقط. تريد حفظ ومن ثم نقل بيانات المستخدم إلى موقع آخر (API) ولكن المتلقي تريد الحصول على بيانات تمس. base64 في غير لذلك. . . الجانب السلبي الوحيد هو أن base64 ترميز سيتطلب حوالي 33٪ مساحة أكبر من السلاسل العادية.

ومثال آخر :: uenc = رابط المشفرة = = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s HTTP : //loc.querytip.com/asics-men-s-gel-kayano-xii.html

وكما ترون لا يمكننا وضع شار "/" في URL إذا أردنا أن ترسل زار URL كمعلمة آخر لأننا كسر حكم سمة / قيمة ل "MOD كتابة" - الحصول على المعلمة

.

وهناك مثال الكامل سيكون: "<لأ href =" http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel -kayano-xii.html / المنتج / 93 / "يختلط =" noreferrer "> http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men- الصورة-جل-kayano-xii.html / المنتج / 93 / "

وفي الغالب، رأيت أنها تستخدم لترميز البيانات الثنائية في السياقات التي يمكن التعامل فقط أسكي - أو بسيط - مجموعات الأحرف

لتوسيع قليلا على ما هو براد قائلا: آليات نقل العديد من تطبيقات البريد الإلكتروني والاعضاء وطرق أخرى لنقل البيانات ليست "نظيفة 8 بت"، وهو ما يعني أن الأحرف خارج مجموعة أحرف ASCII القياسية قد أخطأ في العبور - على سبيل المثال، يمكن أن ينظر 0x0D بمثابة عودة النقل، وتحولت إلى إرجاع وتغذية خط. قاعدة 64 خرائط جميع الشخصيات الثنائية إلى عدة رسائل أسكي القياسية والأرقام وعلامات الترقيم بحيث لن المهترئ بهذه الطريقة.

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

تكمن مشكلة البيانات الثنائية في أنها تحتوي على أحرف فارغة والتي تمثل في بعض اللغات مثل C وC++ نهاية سلسلة الأحرف، لذا فإن إرسال البيانات الثنائية في شكل أولي يحتوي على بايتات NULL سيوقف قراءة الملف بالكامل ويؤدي إلى بيانات فاسدة.

على سبيل المثال :

في C وC++، يُظهر هذا الحرف "الفارغ" نهاية السلسلة.لذلك يتم تخزين "HELLO" على النحو التالي:

مرحبًا

72 69 76 76 79 00

الرقم 00 يقول "توقف هنا".

الآن دعونا نتعمق في كيفية عمل تشفير BASE64.

نقطة تجدر الإشارة إليها:يجب أن يكون طول السلسلة مضاعفًا لـ 3.

مثال 1 :

السلسلة المراد تشفيرها:"الآس" الطول = 3

1) تحويل كل حرف إلى رقم عشري.

أ= 97، ج= 99، ه= 101

enter image description here

2) قم بتغيير كل علامة عشرية إلى تمثيل ثنائي 8 بت.

97= 01100001, 99= 01100011, 101= 01100101

مجموع :01100001 01100011 01100101

3) منفصلة في مجموعة من 6 بت.

011000 010110 001101 100101

4) حساب ثنائي إلى عشري

011000= 24, 010110= 22, 001101= 13, 100101= 37

5) الأحرف العشرية السرية إلى base64 باستخدام مخطط base64.

24= ص، 22= غرب، 13= ن، 37= لتر

"الآس" => "YWNl"

enter image description here

مثال 2 :

السلسلة المراد تشفيرها:الطول "abcd" = 4، وهو ليس مضاعفًا للعدد 3.لذا لجعل طول السلسلة مضاعفًا لـ 3، يجب علينا إضافة 2 بت الحشو لجعل الطول = 6.يتم تمثيل بت الحشو بعلامة "=".

نقطة تجدر الإشارة إليها:بتة الحشو الواحدة تساوي صفرين 00، لذا فإن بتتين الحشو تساوي أربعة أصفار 0000.

لذلك لنبدأ العملية:-

1) تحويل كل حرف إلى رقم عشري.

أ= 97، ب= 98، ج= 99، د= 100

2) قم بتغيير كل علامة عشرية إلى تمثيل ثنائي 8 بت.

97= 01100001, 98= 01100010, 99= 01100011, 100= 01100100

3) منفصلة في مجموعة من 6 بت.

011000, 010110, 001001, 100011, 011001, 00

لذا فإن آخر 6 بتات لم تكتمل لذا قمنا بإدخال بتتين من الحشو يساوي أربعة أصفار "0000".

011000, 010110, 001001, 100011, 011001, 000000 ==

والآن أصبح الأمر متساويًا.تشير علامة يساوي في النهاية إلى إضافة 4 أصفار (تساعد في فك التشفير).

4) حساب ثنائي إلى عشري.

011000= 24, 010110= 22, 001001= 9, 100011= 35, 011001= 25, 000000=0 ==

5) الأحرف العشرية السرية إلى base64 باستخدام مخطط base64.

24= ص، 22= ث، 9= ي، 35= ي، 25= ض، 0= أ ==

"abcd" => "YWJjZA=="

وباستخدام Base64

وباستخدام Base64 هو مصطلح عام لعدد من أنظمة الترميز المماثلة التي ترميز البيانات الثنائية عن طريق التعامل عدديا وترجمتها إلى تمثيل قاعدة 64. ينشأ على المدى باستخدام Base64 من ترميز نقل محتوى MIME محددة.

وتستخدم أنظمة ترميز Base64 عادة عندما يكون هناك حاجة لترميز البيانات الثنائية التي يحتاج خزنها ونقلها عبر وسائل الإعلام التي تم تصميمها للتعامل مع البيانات النصية. هذا هو التأكد من أن البيانات لا تزال سليمة دون تعديل أثناء النقل. يستخدم base64 في عادة في عدد من التطبيقات بما في ذلك البريد الإلكتروني عبر MIME، وتخزين البيانات المعقدة في XML.

وباستخدام Base64 يمكن استخدامها لأغراض كثيرة.

والسبب الرئيسي هو تحويل البيانات الثنائية إلى شيء مقبول.

وأنا في بعض الأحيان استخدامها لتمرير البيانات JSON حول من موقع إلى آخر، وتخزين المعلومات في الكوكيز عن المستخدم.

ملحوظة: أنت "يمكن" استخدامها لتشفير - أنا لا أرى لماذا يقول الناس أنك لا تستطيع، وأنه ليس من التشفير، على الرغم من أنه سيكون قابلة للكسر بسهولة وتثير الامتعاض. التشفير لا يعني شيئا أكثر من تحويل سلسلة واحدة من البيانات إلى سلسلة أخرى من البيانات التي يمكن أن تكون إما في وقت لاحق فك أم لا، وهذا ما لا base64 في.

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