BIO_F_BASE64(3SSL)

الاسم
BIO_f_base64 - مرشح BIO لقاعدة 64

موجز
 #include <openssl/bio.h>
 #include <openssl/evp.h>

 const BIO_METHOD *BIO_f_base64(void);

الوصف
تُرجع الدالة BIO_f_base64() طريقة BIO لقاعدة 64. هذه BIO مرشح يعمي أي بيانات كُتبت من خلاله ويفك تعمية أي بيانات قُرئت من خلاله.

لا تدعم BIOs لقاعدة 64 الدالتين BIO_gets() أو BIO_puts().

للكتابة، يُقسم المخرج مبدئيًا إلى أسطر بطول 64 حرفًا ويوجد سطر جديد في نهاية المخرج. يمكن تغيير هذا السلوك باستخدام العلم BIO_FLAGS_BASE64_NO_NL.

للقراءة، يجب أن يكون السطر الأول من محتوى قاعدة 64 بطول 1024 بايت كحد أقصى بما في ذلك السطر الجديد ما لم يُضبط العلم BIO_FLAGS_BASE64_NO_NL. يمكن أن تكون أسطر الإدخال اللاحقة بأي طول (أي قد تظهر أسطر جديدة في أي مكان في الإدخال) ولا يلزم وجود سطر جديد في نهاية الإدخال.

أيضًا عند القراءة، ما لم يُضبط العلم BIO_FLAGS_BASE64_NO_NL، تُتجاوز الأسطر الأولية التي تحتوي على محتوى غير قاعدي 64 (يُتسامح مع المسافات البيضاء ويُتجاهلها)، وكذلك الأسطر الأطول من 1024 بايت. يبدأ فك التعمية مع أول سطر أقصر من 1024 بايت (بما في ذلك السطر الجديد) ويتكون فقط من (حرف واحد على الأقل) أحرف قاعدة 64 صالحة بالإضافة إلى مسافات بيضاء اختيارية. يتوقف فك التعمية عند مواجهة حشوة قاعدة 64، أو حدوث حرف نهاية إدخال ناعم (-، انظر EVP_DecodeUpdate(3)) كأول بايت بعد فك تعمية مجموعة كاملة من 4 أحرف قاعدة 64 صالحة، أو عند حدوث خطأ (مثل بسبب أحرف إدخال غير أحرف قاعدة 64 صالحة أو مسافات بيضاء).

إذا توقف فك التعمية نتيجة خطأ، فإن أول استدعاء BIO_read(3) لا يُرجع بيانات مفكوكة سيعيد عادةً نتيجة سالبة، بدلاً من 0 (التي تشير إلى نهاية إدخال طبيعية). ومع ذلك، يمكن أن تحدث قيمة إرجاع سالبة أيضًا إذا كانت BIO الأساسية تدعم إعادة المحاولات، انظر BIO_should_read(3) و BIO_set_mem_eof_return(3).

تُستخدم الدالة BIO_flush() على BIO لقاعدة 64 التي يُكتب من خلالها للإشارة إلى أنه لن يُعمى المزيد من البيانات: يُستخدم هذا لتفريغ الكتلة النهائية عبر BIO.

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

ملاحظات
بسبب تنسيق ترميز قاعدة 64، لا يمكن دائمًا تحديد نهاية الكتلة المعماة بشكل موثوق.

القيم المُرجعة
تُرجع الدالة BIO_f_base64() طريقة BIO لقاعدة 64.

أمثلة
عمي السلسلة "Hello World\n" بقاعدة 64 واكتب النتيجة إلى المخرج القياسي:

 BIO *bio, *b64;
 char message[] = "Hello World \n";

 b64 = BIO_new(BIO_f_base64());
 bio = BIO_new_fp(stdout, BIO_NOCLOSE);
 BIO_push(b64, bio);
 BIO_write(b64, message, strlen(message));
 BIO_flush(b64);

 BIO_free_all(b64);

اقرأ بيانات معمّاة بقاعدة 64 من الإدخال القياسي واكتب البيانات المفكوكة إلى المخرج القياسي:

 BIO *bio, *b64, *bio_out;
 char inbuf[512];
 int inlen;

 b64 = BIO_new(BIO_f_base64());
 bio = BIO_new_fp(stdin, BIO_NOCLOSE);
 bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
 BIO_push(b64, bio);
 while ((inlen = BIO_read(b64, inbuf, 512)) > 0)
     BIO_write(bio_out, inbuf, inlen);

 BIO_flush(bio_out);
 BIO_free_all(b64);

العلل
يُعامل حرف الوصلة (-) كحرف نهاية إدخال لينة مخصصة عندما يحدث في بداية مجموعة base64 مكونة من 4 أحرف مشفرة.

يعمل هذا الاستكشاف لكشف نهايات كتل base64 في PEM أو MIME متعدد الأجزاء، بشرط عدم وجود وصلات شاردة في الإدخال الأوسط. لكنه مجرد استكشاف، وقد يُنتج إدخال غير معتاد بما يكفي نتائج غير متوقعة.

ربما ينبغي وجود طريقة لتحديد اختبار يمكن لـ BIO تنفيذه لتحديد نهاية الملف (EOF) بشكل موثوق (مثل حد MIME).

قد يكون من الممكن لـ BIO_read(3) إرجاع صفر بدلاً من -1، حتى لو اكتُشف خطأ، وهناك حاجة لمزيد من الاختبارات لتغطية جميع مسارات الأخطاء المحتملة.

انظر أيضًا
BIO_read(3), BIO_should_read(3), BIO_set_mem_eof_return(3), EVP_DecodeUpdate(3).

حقوق النسخ
حقوق النشر 2000-2024 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.