مُشَفِّر ومُفَكِّك قِيَاس بيس64: تحويل النص إلى/from بيس64
أداة مجانية عبر الإنترنت لترميز النص إلى بيس64 أو فك تشفير سلاسل بيس64 إلى نص. تدعم ترميز بيس64 القياسي والآمن للعنوان مع تحويل فوري.
مُشَفِّر/مُفَكِّك قاعدة64
التوثيق
مشفر وفك تشفير Base64
مقدمة
Base64 هو نظام ترميز ثنائي إلى نص يمثل البيانات الثنائية في تنسيق سلسلة ASCII. تم تصميمه لنقل البيانات المخزنة في تنسيقات ثنائية عبر قنوات تدعم بشكل موثوق محتوى نصي فقط. يقوم ترميز Base64 بتحويل البيانات الثنائية إلى مجموعة من 64 حرفًا (ومن هنا جاء الاسم) يمكن نقلها بأمان عبر بروتوكولات قائمة على النص دون تلف البيانات.
يتكون مجموعة أحرف Base64 من:
- الأحرف الكبيرة A-Z (26 حرفًا)
- الأحرف الصغيرة a-z (26 حرفًا)
- الأرقام 0-9 (10 أحرف)
- حرفين إضافيين، عادةً "+" و "/" (2 حرف)
تتيح لك هذه الأداة بسهولة تشفير النص إلى تنسيق Base64 أو فك تشفير سلاسل Base64 مرة أخرى إلى نصها الأصلي. إنها مفيدة بشكل خاص للمطورين والمهنيين في تكنولوجيا المعلومات وأي شخص يعمل مع البيانات التي تحتاج إلى نقلها بأمان عبر قنوات قائمة على النص. مع ميزة التحويل في الوقت الفعلي، يمكنك رؤية النتائج على الفور أثناء الكتابة، مما يجعل سير العمل الخاص بك في التشفير وفك التشفير أكثر كفاءة.
كيف يعمل ترميز Base64
عملية التشفير
يعمل ترميز Base64 عن طريق تحويل كل مجموعة من ثلاثة بايت (24 بت) من البيانات الثنائية إلى أربعة أحرف Base64. تتبع العملية الخطوات التالية:
- تحويل النص المدخل إلى تمثيل ثنائي له (باستخدام ترميز ASCII أو UTF-8)
- تجميع البيانات الثنائية في قطع من 24 بت (3 بايت)
- تقسيم كل قطعة من 24 بت إلى أربع مجموعات من 6 بت
- تحويل كل مجموعة من 6 بت إلى حرف Base64 المقابل لها
عندما لا يكون طول المدخلات قابلاً للقسمة على 3، يتم إضافة حشو باستخدام "=" للحفاظ على نسبة 4:3 من أطوال المخرجات إلى المدخلات.
التمثيل الرياضي
لسلسلة من البايتات ، يتم حساب أحرف Base64 المقابلة كالتالي:
حيث يمثل الحرف في أبجدية Base64.
عملية فك التشفير
يعكس فك تشفير Base64 عملية التشفير:
- تحويل كل حرف من Base64 إلى قيمته 6 بت
- دمج هذه القيم 6 بت
- تجميع البتات في قطع 8 بت (بايتات)
- تحويل كل بايت إلى الحرف المقابل له
الحشو
عندما يكون عدد البايتات المراد تشفيرها غير قابل للقسمة على 3، يتم تطبيق الحشو:
- إذا كان هناك بايت واحد متبقي، يتم تحويله إلى حرفين من Base64 متبوعين بـ "=="
- إذا كان هناك بايتين متبقيين، يتم تحويلهما إلى ثلاثة أحرف من Base64 متبوعة بـ "="
مثال
دعنا نشفر النص "Hello" إلى Base64:
- التمثيل ASCII لـ "Hello": 72 101 108 108 111
- التمثيل الثنائي: 01001000 01100101 01101100 01101100 01101111
- التجميع في قطع من 6 بت: 010010 000110 010101 101100 011011 000110 1111
- القطعة الأخيرة تحتوي فقط على 4 بت، لذا نقوم بحشوها بصفر: 010010 000110 010101 101100 011011 000110 111100
- التحويل إلى العشري: 18، 6، 21، 44، 27، 6، 60
- البحث في أبجدية Base64: S، G، V، s، b، G، 8
- النتيجة هي "SGVsbG8="
لاحظ الحشو "=" في النهاية لأن طول المدخلات (5 بايت) غير قابل للقسمة على 3.
الصيغة
الصيغة العامة لحساب طول سلسلة مشفرة Base64 هي:
حيث تمثل دالة السقف (التقريب لأعلى إلى أقرب عدد صحيح).
استخدام أداة تشفير/فك تشفير Base64
تقدم أداتنا لـ Base64 طريقة بسيطة وفعالة لتشفير النص إلى Base64 أو فك تشفير Base64 مرة أخرى إلى نص. إليك كيفية استخدامها:
الاستخدام الأساسي
- اختر وضع العملية: اختر "تشفير" لتحويل النص إلى Base64، أو "فك التشفير" لتحويل Base64 مرة أخرى إلى نص.
- أدخل المدخلات الخاصة بك: اكتب أو الصق نصك أو سلسلة Base64 في حقل الإدخال.
- تحويل: انقر على زر "تشفير إلى Base64" أو "فك التشفير من Base64" لإجراء التحويل.
- انسخ النتيجة: استخدم زر "نسخ" لنسخ النتيجة إلى الحافظة الخاصة بك.
ميزة التحويل المباشر
تتضمن أداتنا الآن خيار التحويل المباشر الذي يقوم بتحديث المخرجات أثناء الكتابة:
- تفعيل التحويل المباشر: تحقق من مربع "التحويل المباشر" في أعلى الأداة.
- رؤية النتائج الفورية: أثناء الكتابة في حقل الإدخال، سيتم تحديث المخرجات تلقائيًا دون الحاجة إلى النقر على زر التحويل.
- التبديل حسب الحاجة: يمكنك تفعيل أو تعطيل التحويل المباشر في أي وقت بناءً على تفضيلاتك.
تعتبر ميزة التحويل المباشر مفيدة بشكل خاص عندما:
- تعمل مع نصوص أو سلاسل Base64 قصيرة إلى متوسطة الطول
- تقوم بإجراء تغييرات تدريجية وتحتاج إلى ملاحظات فورية
- تستكشف كيفية ترميز/فك ترميز أحرف مختلفة
- تتعلم عن أنماط ترميز Base64
بالنسبة للمدخلات الكبيرة جدًا، تستخدم الأداة تقنية "التأخير" للحفاظ على الأداء، مما يضمن أن التحويل يحدث فقط بعد توقفك عن الكتابة لفترة قصيرة، بدلاً من كل ضغطة مفتاح.
حالات الاستخدام
يستخدم ترميز Base64 على نطاق واسع في تطبيقات مختلفة:
-
مرفقات البريد الإلكتروني: يستخدم MIME (امتدادات البريد الإلكتروني متعددة الأغراض) Base64 لتشفير المرفقات الثنائية في البريد الإلكتروني.
-
عناوين البيانات: تضمين صور صغيرة أو خطوط أو موارد أخرى مباشرة في HTML أو CSS أو JavaScript باستخدام مخطط URL
data:
. -
اتصالات API: نقل البيانات الثنائية بأمان في حمولة JSON أو تنسيقات API النصية الأخرى.
-
تخزين البيانات الثنائية في تنسيقات نصية: عندما تحتاج البيانات الثنائية إلى تخزينها في XML أو JSON أو تنسيقات نصية أخرى.
-
أنظمة المصادقة: تستخدم المصادقة الأساسية في HTTP ترميز Base64 (على الرغم من أنه ليس للأمان، بل للتشفير فقط).
-
التشفير: كجزء من بروتوكولات وأنظمة تشفير مختلفة، غالبًا لتشفير المفاتيح أو الشهادات.
-
قيم الكوكيز: ترميز الهياكل البيانية المعقدة لتخزينها في الكوكيز.
البدائل
بينما يُستخدم Base64 على نطاق واسع، هناك بدائل قد تكون أكثر ملاءمة في مواقف معينة:
-
Base64 الآمن من URL: نسخة تستخدم "-" و "_" بدلاً من "+" و "/" لتجنب مشاكل ترميز URL. مفيد للبيانات التي ستدرج في عناوين URL.
-
Base32: يستخدم مجموعة من 32 حرفًا، مما يؤدي إلى مخرجات أطول ولكن مع قراءة أفضل من قبل البشر وعدم حساسية للحالة.
-
ترميز Hex: تحويل بسيط إلى السداسي، والذي يكون أقل كفاءة (يضاعف الحجم) ولكنه بسيط جدًا ومدعوم على نطاق واسع.
-
النقل الثنائي: للملفات الكبيرة أو عندما تكون الكفاءة أمرًا حاسمًا، فإن بروتوكولات النقل الثنائي المباشر مثل HTTP مع رؤوس Content-Type المناسبة تكون مفضلة.
-
الضغط + Base64: بالنسبة للبيانات النصية الكبيرة، يمكن أن يساعد الضغط قبل التشفير في تقليل الزيادة في الحجم.
-
تسلسل JSON/XML: بالنسبة للبيانات الهيكلية، قد يكون استخدام التسلسل الأصلي لـ JSON أو XML أكثر ملاءمة من ترميز Base64.
التاريخ
ترميز Base64 له جذوره في الحوسبة المبكرة وأنظمة الاتصالات حيث كانت البيانات الثنائية بحاجة إلى النقل عبر قنوات مصممة للنص.
تم نشر المواصفة الرسمية لـ Base64 لأول مرة في عام 1987 كجزء من RFC 989، والتي عرّفت البريد الإلكتروني المحسن للخصوصية (PEM). تم تحديث ذلك لاحقًا في RFC 1421 (1993) و RFC 2045 (1996، كجزء من MIME).
يأتي مصطلح "Base64" من حقيقة أن الترميز يستخدم 64 حرفًا ASCII مختلفًا لتمثيل البيانات الثنائية. كان هذا الاختيار لـ 64 حرفًا مقصودًا، حيث أن 64 هو قوة من 2 (2^6)، مما يجعل التحويل بين البيانات الثنائية وBase64 فعالًا.
على مر الزمن، ظهرت عدة نسخ من Base64:
- Base64 القياسي: كما هو محدد في RFC 4648، باستخدام A-Z، a-z، 0-9، +، / و = للحشو
- Base64 الآمن من URL: يستخدم - و _ بدلاً من + و / لتجنب مشاكل ترميز URL
- Base64 الآمن من أسماء الملفات: مشابه للآمن من URL، مصمم للاستخدام في أسماء الملفات
- Base64 المعدل لـ IMAP: مستخدم في بروتوكول IMAP مع مجموعة مختلفة من الأحرف الخاصة
على الرغم من كونه عمره أكثر من ثلاثة عقود، لا يزال Base64 أداة أساسية في الحوسبة الحديثة، خاصة مع ارتفاع تطبيقات الويب وواجهات برمجة التطبيقات التي تعتمد بشكل كبير على تنسيقات البيانات النصية مثل JSON.
أمثلة على الشيفرة
إليك أمثلة على تشفير وفك تشفير Base64 في لغات برمجة مختلفة:
1// تشفير/فك تشفير Base64 في JavaScript
2function encodeToBase64(text) {
3 return btoa(text);
4}
5
6function decodeFromBase64(base64String) {
7 try {
8 return atob(base64String);
9 } catch (e) {
10 throw new Error("سلسلة Base64 غير صالحة");
11 }
12}
13
14// مثال على الاستخدام
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("المشفر:", encoded); // SGVsbG8sIFdvcmxkIQ==
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("المفكك:", decoded); // Hello, World!
22} catch (error) {
23 console.error(error.message);
24}
25
1# تشفير/فك تشفير Base64 في بايثون
2import base64
3
4def encode_to_base64(text):
5 # تحويل السلسلة إلى بايت ثم تشفير
6 text_bytes = text.encode('utf-8')
7 base64_bytes = base64.b64encode(text_bytes)
8 return base64_bytes.decode('utf-8')
9
10def decode_from_base64(base64_string):
11 try:
12 # تحويل سلسلة base64 إلى بايت ثم فك التشفير
13 base64_bytes = base64_string.encode('utf-8')
14 text_bytes = base64.b64decode(base64_bytes)
15 return text_bytes.decode('utf-8')
16 except Exception as e:
17 raise ValueError(f"سلسلة Base64 غير صالحة: {e}")
18
19# مثال على الاستخدام
20original_text = "Hello, World!"
21encoded = encode_to_base64(original_text)
22print(f"المشفر: {encoded}") # SGVsbG8sIFdvcmxkIQ==
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"المفكك: {decoded}") # Hello, World!
27except ValueError as e:
28 print(e)
29
1// تشفير/فك تشفير Base64 في Java
2import java.util.Base64;
3import java.nio.charset.StandardCharsets;
4
5public class Base64Example {
6 public static String encodeToBase64(String text) {
7 byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
8 byte[] encodedBytes = Base64.getEncoder().encode(textBytes);
9 return new String(encodedBytes, StandardCharsets.UTF_8);
10 }
11
12 public static String decodeFromBase64(String base64String) {
13 try {
14 byte[] base64Bytes = base64String.getBytes(StandardCharsets.UTF_8);
15 byte[] decodedBytes = Base64.getDecoder().decode(base64Bytes);
16 return new String(decodedBytes, StandardCharsets.UTF_8);
17 } catch (IllegalArgumentException e) {
18 throw new IllegalArgumentException("سلسلة Base64 غير صالحة: " + e.getMessage());
19 }
20 }
21
22 public static void main(String[] args) {
23 String originalText = "Hello, World!";
24 String encoded = encodeToBase64(originalText);
25 System.out.println("المشفر: " + encoded); // SGVsbG8sIFdvcmxkIQ==
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("المفكك: " + decoded); // Hello, World!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// تشفير/فك تشفير Base64 في PHP
3function encodeToBase64($text) {
4 return base64_encode($text);
5}
6
7function decodeFromBase64($base64String) {
8 $decoded = base64_decode($base64String, true);
9 if ($decoded === false) {
10 throw new Exception("سلسلة Base64 غير صالحة");
11 }
12 return $decoded;
13}
14
15// مثال على الاستخدام
16$originalText = "Hello, World!";
17$encoded = encodeToBase64($originalText);
18echo "المشفر: " . $encoded . "\n"; // SGVsbG8sIFdvcmxkIQ==
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "المفكك: " . $decoded . "\n"; // Hello, World!
23} catch (Exception $e) {
24 echo "خطأ: " . $e->getMessage() . "\n";
25}
26?>
27
1// تشفير/فك تشفير Base64 في C#
2using System;
3using System.Text;
4
5class Base64Example
6{
7 public static string EncodeToBase64(string text)
8 {
9 byte[] textBytes = Encoding.UTF8.GetBytes(text);
10 return Convert.ToBase64String(textBytes);
11 }
12
13 public static string DecodeFromBase64(string base64String)
14 {
15 try
16 {
17 byte[] base64Bytes = Convert.FromBase64String(base64String);
18 return Encoding.UTF8.GetString(base64Bytes);
19 }
20 catch (FormatException)
21 {
22 throw new FormatException("سلسلة Base64 غير صالحة");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hello, World!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"المشفر: {encoded}"); // SGVsbG8sIFdvcmxkIQ==
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"المفكك: {decoded}"); // Hello, World!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"خطأ: {e.Message}");
40 }
41 }
42}
43
1# تشفير/فك تشفير Base64 في روبي
2require 'base64'
3
4def encode_to_base64(text)
5 Base64.strict_encode64(text)
6end
7
8def decode_from_base64(base64_string)
9 begin
10 Base64.strict_decode64(base64_string)
11 rescue ArgumentError => e
12 raise "سلسلة Base64 غير صالحة: #{e.message}"
13 end
14end
15
16# مثال على الاستخدام
17original_text = "Hello, World!"
18encoded = encode_to_base64(original_text)
19puts "المشفر: #{encoded}" # SGVsbG8sIFdvcmxkIQ==
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "المفكك: #{decoded}" # Hello, World!
24rescue StandardError => e
25 puts "خطأ: #{e.message}"
26end
27
1// تشفير/فك تشفير Base64 في Go
2package main
3
4import (
5 "encoding/base64"
6 "fmt"
7)
8
9func encodeToBase64(text string) string {
10 return base64.StdEncoding.EncodeToString([]byte(text))
11}
12
13func decodeFromBase64(base64_string string) (string, error) {
14 bytes, err := base64.StdEncoding.DecodeString(base64_string)
15 if err != nil {
16 return "", fmt.Errorf("سلسلة Base64 غير صالحة: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hello, World!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("المشفر:", encoded) // SGVsbG8sIFdvcmxkIQ==
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("خطأ:", err)
29 } else {
30 fmt.Println("المفكك:", decoded) // Hello, World!
31 }
32}
33
1// تشفير/فك تشفير Base64 في Swift
2import Foundation
3
4func encodeToBase64(_ text: String) -> String? {
5 if let data = text.data(using: .utf8) {
6 return data.base64EncodedString()
7 }
8 return nil
9}
10
11func decodeFromBase64(_ base64String: String) -> String? {
12 if let data = Data(base64Encoded: base64String) {
13 return String(data: data, encoding: .utf8)
14 }
15 return nil
16}
17
18// مثال على الاستخدام
19let originalText = "Hello, World!"
20if let encoded = encodeToBase64(originalText) {
21 print("المشفر: \(encoded)") // SGVsbG8sIFdvcmxkIQ==
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("المفكك: \(decoded)") // Hello, World!
25 } else {
26 print("خطأ: لم يتمكن من فك تشفير سلسلة Base64")
27 }
28} else {
29 print("خطأ: لم يتمكن من تشفير النص")
30}
31
1' تشفير/فك تشفير Base64 في Excel VBA
2' ملاحظة: يتطلب مرجعًا إلى Microsoft XML، v6.0
3Function EncodeToBase64(text As String) As String
4 Dim xmlObj As Object
5 Set xmlObj = CreateObject("MSXML2.DOMDocument")
6
7 Dim xmlNode As Object
8 Set xmlNode = xmlObj.createElement("b64")
9
10 xmlNode.DataType = "bin.base64"
11 xmlNode.nodeTypedValue = StrConv(text, vbFromUnicode)
12
13 EncodeToBase64 = xmlNode.text
14
15 Set xmlNode = Nothing
16 Set xmlObj = Nothing
17End Function
18
19Function DecodeFromBase64(base64String As String) As String
20 On Error GoTo ErrorHandler
21
22 Dim xmlObj As Object
23 Set xmlObj = CreateObject("MSXML2.DOMDocument")
24
25 Dim xmlNode As Object
26 Set xmlNode = xmlObj.createElement("b64")
27
28 xmlNode.DataType = "bin.base64"
29 xmlNode.text = base64String
30
31 DecodeFromBase64 = StrConv(xmlNode.nodeTypedValue, vbUnicode)
32
33 Set xmlNode = Nothing
34 Set xmlObj = Nothing
35 Exit Function
36
37ErrorHandler:
38 DecodeFromBase64 = "خطأ: سلسلة Base64 غير صالحة"
39End Function
40
41' الاستخدام في ورقة العمل:
42' =EncodeToBase64("Hello, World!")
43' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
44
1# تشفير/فك تشفير Base64 في R
2# يتطلب حزمة 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # تحويل النص إلى بايت خام، ثم التشفير
8 text_raw <- charToRaw(text)
9 base64_encoded <- base64encode(text_raw)
10 return(rawToChar(base64_encoded))
11}
12
13decode_from_base64 <- function(base64_string) {
14 tryCatch({
15 # تحويل سلسلة base64 إلى بايت خام، ثم فك التشفير
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("سلسلة Base64 غير صالحة:", e$message))
21 })
22}
23
24# مثال على الاستخدام
25original_text <- "Hello, World!"
26encoded <- encode_to_base64(original_text)
27cat("المشفر:", encoded, "\n") # SGVsbG8sIFdvcmxkIQ==
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("المفكك:", decoded, "\n") # Hello, World!
32}, error = function(e) {
33 cat("خطأ:", e$message, "\n")
34})
35
1% تشفير/فك تشفير Base64 في MATLAB
2function demo_base64()
3 originalText = 'Hello, World!';
4
5 % تشفير
6 encoded = encode_to_base64(originalText);
7 fprintf('المشفر: %s\n', encoded); % SGVsbG8sIFdvcmxkIQ==
8
9 % فك التشفير
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('المفكك: %s\n', decoded); % Hello, World!
13 catch e
14 fprintf('خطأ: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % تحويل النص إلى مصفوفة uint8 ثم التشفير
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % فك تشفير سلسلة base64 إلى مصفوفة uint8
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('سلسلة Base64 غير صالحة');
31 end
32end
33
1// تشفير/فك تشفير Base64 باستخدام OpenSSL في C
2#include <stdio.h>
3#include <string.h>
4#include <openssl/bio.h>
5#include <openssl/evp.h>
6#include <openssl/buffer.h>
7#include <stdint.h>
8
9char* encode_to_base64(const char* input) {
10 BIO *bio, *b64;
11 BUF_MEM *bufferPtr;
12
13 b64 = BIO_new(BIO_f_base64());
14 bio = BIO_new(BIO_s_mem());
15 bio = BIO_push(b64, bio);
16
17 BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
18 BIO_write(bio, input, strlen(input));
19 BIO_flush(bio);
20 BIO_get_mem_ptr(bio, &bufferPtr);
21
22 char* result = (char*)malloc(bufferPtr->length + 1);
23 memcpy(result, bufferPtr->data, bufferPtr->length);
24 result[bufferPtr->length] = '\0';
25
26 BIO_free_all(bio);
27
28 return result;
29}
30
31char* decode_from_base64(const char* input) {
32 BIO *bio, *b64;
33 size_t length = strlen(input);
34 char* buffer = (char*)malloc(length);
35
36 b64 = BIO_new(BIO_f_base64());
37 bio = BIO_new_mem_buf(input, -1);
38 bio = BIO_push(b64, bio);
39
40 BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
41 int decoded_length = BIO_read(bio, buffer, length);
42
43 if (decoded_length <= 0) {
44 free(buffer);
45 BIO_free_all(bio);
46 return NULL; // سلسلة Base64 غير صالحة
47 }
48
49 buffer[decoded_length] = '\0';
50
51 BIO_free_all(bio);
52
53 return buffer;
54}
55
56int main() {
57 const char* original_text = "Hello, World!";
58
59 char* encoded = encode_to_base64(original_text);
60 printf("المشفر: %s\n", encoded); // SGVsbG8sIFdvcmxkIQ==
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("المفكك: %s\n", decoded); // Hello, World!
65 free(decoded);
66 } else {
67 printf("خطأ: سلسلة Base64 غير صالحة\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// تشفير/فك تشفير Base64 في Rust
2use base64::{encode, decode};
3use std::str;
4
5fn encode_to_base64(text: &str) -> String {
6 encode(text)
7}
8
9fn decode_from_base64(base64_string: &str) -> Result<String, String> {
10 match decode(base64_string) {
11 Ok(bytes) => {
12 match str::from_utf8(&bytes) {
13 Ok(text) => Ok(text.to_string()),
14 Err(e) => Err(format!("تسلسل UTF-8 غير صالح: {}", e))
15 }
16 },
17 Err(e) => Err(format!("سلسلة Base64 غير صالحة: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hello, World!";
23 let encoded = encode_to_base64(original_text);
24 println!("المشفر: {}", encoded); // SGVsbG8sIFdvcmxkIQ==
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("المفكك: {}", decoded), // Hello, World!
28 Err(e) => println!("خطأ: {}", e)
29 }
30}
31
1// تنفيذ JavaScript مع التحويل المباشر
2const textInput = document.getElementById('text-input');
3const base64Output = document.getElementById('base64-output');
4const liveConversionCheckbox = document.getElementById('live-conversion');
5let debounceTimeout = null;
6
7// دالة للتشفير مع التأخير للأداء
8function liveEncode() {
9 // مسح أي مهلة موجودة
10 if (debounceTimeout) {
11 clearTimeout(debounceTimeout);
12 }
13
14 // تعيين مهلة جديدة لمنع المعالجة المفرطة أثناء الكتابة السريعة
15 debounceTimeout = setTimeout(() => {
16 try {
17 const text = textInput.value;
18 if (text.trim()) {
19 base64Output.value = btoa(text);
20 } else {
21 base64Output.value = '';
22 }
23 } catch (e) {
24 console.error('خطأ في التشفير:', e);
25 // معالجة الخطأ بشكل مناسب في واجهة المستخدم
26 }
27 }, 300); // تأخير 300 مللي ثانية
28}
29
30// مستمعي الأحداث
31liveConversionCheckbox.addEventListener('change', function() {
32 if (this.checked) {
33 // تفعيل التحويل المباشر
34 textInput.addEventListener('input', liveEncode);
35 // تشفير أولي
36 liveEncode();
37 } else {
38 // تعطيل التحويل المباشر
39 textInput.removeEventListener('input', liveEncode);
40 }
41});
42
الحالات الخاصة والاعتبارات
عند العمل مع ترميز وفك تشفير Base64، كن على علم بهذه الاعتبارات المهمة:
-
Unicode والأحرف غير ASCII: عند تشفير النصوص التي تحتوي على أحرف غير ASCII، تأكد من استخدام ترميز الأحرف الصحيح (عادةً UTF-8) قبل تشفير Base64.
-
الحشو: يستخدم Base64 القياسي الحشو باستخدام "=" لضمان أن طول المخرجات هو مضاعف لـ 4. تسمح بعض التطبيقات بإغفال الحشو، مما قد يتسبب في مشاكل التوافق.
-
فواصل الأسطر: تقوم تطبيقات Base64 التقليدية بإدراج فواصل أسطر (عادةً كل 76 حرفًا) لزيادة قابلية القراءة، لكن التطبيقات الحديثة غالبًا ما تغفل ذلك.
-
Base64 الآمن من URL: يستخدم Base64 القياسي "+" و"/" التي لها معانٍ خاصة في عناوين URL. في سياقات URL، استخدم Base64 الآمن من URL الذي يستبدل هذه الأحرف بـ "-" و"_".
-
المسافات البيضاء: عند فك التشفير، تكون بعض التطبيقات متساهلة وتتجاهل المسافات البيضاء، بينما تتطلب أخرى إدخالًا دقيقًا.
-
زيادة الحجم: يزيد ترميز Base64 من حجم البيانات بحوالي 33% (4 بايتات مخرجة لكل 3 بايتات مدخلة).
-
الأداء: يمكن أن يكون تشفير وفك تشفير Base64 مكثفًا حسابيًا للبيانات الكبيرة جدًا. تستخدم أداتنا تقنية التأخير للحفاظ على الاستجابة حتى مع المدخلات الكبيرة.
-
اعتبارات التحويل المباشر: عند استخدام ميزة التحويل المباشر مع المدخلات الكبيرة جدًا، قد تلاحظ تأخيرًا طفيفًا أثناء معالجة الأداة للبيانات. هذا أمر طبيعي ويساعد في الحفاظ على أداء المتصفح.
الأسئلة الشائعة
ما هي ميزة التحويل المباشر؟
تقوم ميزة التحويل المباشر بتحديث المخرجات تلقائيًا أثناء الكتابة، دون الحاجة إلى النقر على زر التشفير أو فك التشفير. هذا يوفر ملاحظات فورية ويجعل الأداة أكثر تفاعلية وكفاءة للاستخدام.
هل سيؤدي التحويل المباشر إلى إبطاء المتصفح لدي مع المدخلات الكبيرة؟
تستخدم تنفيذاتنا تقنية التأخير لضمان أداء جيد حتى مع المدخلات الكبيرة. يحدث التحويل فقط بعد توقفك عن الكتابة لفترة قصيرة، بدلاً من كل ضغطة مفتاح، مما يمنع المعالجة المفرطة أثناء الكتابة السريعة.
متى يجب أن أستخدم التحويل المباشر مقابل التحويل اليدوي؟
يعد التحويل المباشر مثاليًا للعمل التفاعلي حيث تحتاج إلى ملاحظات فورية. بالنسبة لمجموعات البيانات الكبيرة جدًا أو عندما تريد مراجعة إدخالاتك قبل التحويل، قد تفضل خيار التحويل اليدوي.
هل يعمل التحويل المباشر لكل من التشفير وفك التشفير؟
نعم، تعمل ميزة التحويل المباشر في كلا الاتجاهين - من النص إلى Base64 ومن Base64 إلى النص.
ماذا يحدث إذا قمت بإدخال Base64 غير صالح مع تفعيل التحويل المباشر؟
إذا قمت بإدخال أحرف Base64 غير صالحة أثناء وضع فك التشفير مع تفعيل التحويل المباشر، ستعرض الأداة رسالة خطأ في الوقت الفعلي، مما يساعدك على تحديد المشكلة وتصحيحها على الفور.
المراجع
- RFC 4648 - ترميز البيانات Base16 وBase32 وBase64
- RFC 2045 - MIME الجزء الأول: تنسيق أجسام الرسائل على الإنترنت
- MDN Web Docs: ترميز وفك ترميز Base64
- Base64 - ويكيبيديا
- MIME - ويكيبيديا
جرب أداة مشفر/فك تشفير Base64 الخاصة بنا اليوم لتحويل النص بسرعة بين تنسيقات النص وBase64 مع راحة التحويل في الوقت الفعلي. سواء كنت مطورًا يعمل مع واجهات برمجة التطبيقات، أو تتعامل مع مرفقات البريد الإلكتروني، أو تضمين بيانات ثنائية في تنسيقات نصية، تجعل أداتنا العملية بسيطة وفعالة.
الأدوات ذات الصلة
اكتشف المزيد من الأدوات التي قد تكون مفيدة لسير عملك