رمزگذار و رمزگشای Base64: تبدیل متن به/از Base64
ابزار آنلاین رایگان برای رمزگذاری متن به Base64 یا رمزگشایی رشتههای Base64 به متن. از رمزگذاری Base64 استاندارد و ایمن برای URL پشتیبانی میکند و تبدیل آنی را ارائه میدهد.
رمزگذار/رمزگشای Base64
مستندات
رمزگذار و رمزگشای Base64
مقدمه
Base64 یک طرح رمزگذاری باینری به متن است که دادههای باینری را به فرمت رشتهای ASCII تبدیل میکند. این طرح برای انتقال دادههای ذخیرهشده در فرمتهای باینری از طریق کانالهایی طراحی شده است که تنها محتوای متنی را بهطور قابلاعتماد پشتیبانی میکنند. رمزگذاری Base64 دادههای باینری را به مجموعهای از 64 کاراکتر (به همین دلیل نام آن) تبدیل میکند که میتوانند بهطور ایمن از طریق پروتکلهای مبتنی بر متن منتقل شوند بدون اینکه دادهها خراب شوند.
مجموعه کاراکترهای Base64 شامل:
- حروف بزرگ A-Z (26 کاراکتر)
- حروف کوچک a-z (26 کاراکتر)
- اعداد 0-9 (10 کاراکتر)
- دو کاراکتر اضافی، معمولاً "+" و "/" (2 کاراکتر)
این ابزار به شما امکان میدهد بهراحتی متن را به فرمت Base64 رمزگذاری کنید یا رشتههای Base64 را به متن اصلی خود رمزگشایی کنید. این ابزار بهویژه برای توسعهدهندگان، متخصصان IT و هر کسی که با دادههایی کار میکند که باید بهطور ایمن از طریق کانالهای مبتنی بر متن منتقل شوند، مفید است. با ویژگی تبدیل در زمان واقعی ما، میتوانید بلافاصله نتایج را در حین تایپ مشاهده کنید و روند کار رمزگذاری و رمزگشایی خود را کارآمدتر کنید.
نحوه کار رمزگذاری 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 برای رمزگذاری پیوستهای باینری در ایمیل استفاده میکند.
-
URLهای داده: جاسازی تصاویر کوچک، فونتها یا منابع دیگر بهطور مستقیم در HTML، CSS یا JavaScript با استفاده از طرح URL
data:
. -
ارتباطات API: انتقال ایمن دادههای باینری در بارهای JSON یا سایر فرمتهای متنی API.
-
ذخیره دادههای باینری در فرمتهای متنی: زمانی که دادههای باینری باید در XML، JSON یا سایر فرمتهای مبتنی بر متن ذخیره شوند.
-
سیستمهای احراز هویت: احراز هویت پایه در HTTP از رمزگذاری Base64 استفاده میکند (اگرچه این کار برای امنیت نیست، بلکه فقط برای رمزگذاری است).
-
رمزنگاری: بهعنوان بخشی از پروتکلها و سیستمهای رمزنگاری مختلف، اغلب برای رمزگذاری کلیدها یا گواهینامهها.
-
مقدارهای کوکی: رمزگذاری ساختارهای داده پیچیده برای ذخیره در کوکیها.
جایگزینها
در حالی که Base64 بهطور گستردهای استفاده میشود، جایگزینهایی وجود دارند که ممکن است در شرایط خاص مناسبتر باشند:
-
Base64 ایمن برای URL: یک نوع که بهجای "+" و "/" از "-" و "_" استفاده میکند تا از مشکلات رمزگذاری URL جلوگیری کند. برای دادههایی که در URLها گنجانده میشوند، مفید است.
-
Base32: از مجموعه 32 کاراکتر استفاده میکند که خروجی طولانیتری را ایجاد میکند اما با خوانایی بهتر و عدم حساسیت به حروف بزرگ و کوچک.
-
رمزگذاری هگز: تبدیل ساده به هگزادسیمال، که کمتر کارآمد است (اندازه را دو برابر میکند) اما بسیار ساده و بهطور گستردهای پشتیبانی میشود.
-
انتقال باینری: برای فایلهای بزرگ یا زمانی که کارایی مهم است، پروتکلهای انتقال باینری مستقیم مانند 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 همچنان ابزاری اساسی در محاسبات مدرن است، بهویژه با ظهور برنامههای وب و APIهایی که بهشدت به فرمتهای داده متنی مانند JSON وابسته هستند.
مثالهای کد
در اینجا مثالهایی از رمزگذاری و رمزگشایی Base64 در زبانهای برنامهنویسی مختلف آورده شده است:
1// رمزگذاری/رمزگشایی Base64 در جاوااسکریپت
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 در جاوا
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 در Ruby
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 در 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// پیادهسازی جاوااسکریپت با تبدیل زنده
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 // در UI بهطور مناسب خطا را مدیریت کنید
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، به این نکات مهم توجه داشته باشید:
-
یونیکد و کاراکترهای غیر ASCII: هنگام رمزگذاری متنی با کاراکترهای غیر ASCII، اطمینان حاصل کنید که قبل از رمزگذاری Base64، رمزگذاری کاراکتر مناسب (معمولاً UTF-8) انجام شده باشد.
-
پر کردن: 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 تبدیل کنید با راحتی تبدیل در زمان واقعی. چه شما یک توسعهدهنده باشید که با APIها کار میکند، پیوستهای ایمیل را مدیریت میکند یا دادههای باینری را در فرمتهای متنی جاسازی میکند، ابزار ما روند کار را ساده و کارآمد میکند.
ابزارهای مرتبط
کشف ابزارهای بیشتری که ممکن است برای جریان کاری شما مفید باشند