Base64 кодер и декодер: Преобразувайте текст от/в Base64
Безплатен онлайн инструмент за кодиране на текст в Base64 или декодиране на Base64 низове обратно в текст. Поддържа стандартно и URL-безопасно Base64 кодиране с мигновено преобразуване.
Кодер/Декодер на Base64
Конвертирайте текст в и от Base64 кодиране
Документация
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 се използва широко в различни приложения:
-
Имейл приложения: MIME (Multipurpose Internet Mail Extensions) използва Base64 за кодиране на бинарни приложения в имейли.
-
Data URLs: Вграждане на малки изображения, шрифтове или други ресурси директно в HTML, CSS или JavaScript, използвайки схемата
data:
URL. -
API комуникации: Безопасно предаване на бинарни данни в JSON полезни натоварвания или други текстово базирани формати на API.
-
Съхраняване на бинарни данни в текстови формати: Когато бинарни данни трябва да се съхраняват в XML, JSON или други текстово базирани формати.
-
Системи за удостоверяване: Основното удостоверяване в HTTP използва Base64 кодиране (въпреки че не е за сигурност, а просто за кодиране).
-
Криптография: Като част от различни криптографски протоколи и системи, често за кодиране на ключове или сертификати.
-
Стойности на бисквитки: Кодиране на сложни структури от данни, за да бъдат съхранявани в бисквитки.
Алтернативи
Въпреки че Base64 е широко използван, съществуват алтернативи, които могат да бъдат по-подходящи в определени ситуации:
-
URL-безопасен Base64: Вариант, който използва "-" и "_" вместо "+" и "/", за да избегне проблеми с кодиране на URL. Полезно за данни, които ще бъдат включени в URL адреси.
-
Base32: Използва 32-символен набор, което води до по-дълъг изход, но с по-добра четимост и нечувствителност към регистъра.
-
Шестнадесетично кодиране: Проста конверсия в шестнадесетичен формат, който е по-малко ефективен (удвоява размера), но много прост и широко поддържан.
-
Бинарен трансфер: За големи файлове или когато ефективността е от съществено значение, директните бинарни трансферни протоколи като HTTP с подходящи заглавия на съдържание са предпочитани.
-
Компресия + 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, +, / и = за допълване
- URL-безопасен Base64: Използва - и _ вместо + и / за избягване на проблеми с кодиране на URL
- Безопасен Base64 за имена на файлове: Подобен на URL-безопасен, проектиран за употреба в имена на файлове
- Модифициран Base64 за IMAP: Използван в IMAP протокола с различен набор от специални символи
Въпреки че е на повече от три десетилетия, Base64 остава основен инструмент в съвременните компютри, особено с нарастващото значение на уеб приложения и API, които разчитат силно на текстово базирани формати на данни като JSON.
Примери за код
Ето примери за кодиране и декодиране на Base64 на различни програмни езици:
1// JavaScript 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# Python 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// Java 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// PHP Base64 Кодиране/Декодиране
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// C# Base64 Кодиране/Декодиране
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# Ruby 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// Go Base64 Кодиране/Декодиране
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(base64String string) (string, error) {
14 bytes, err := base64.StdEncoding.DecodeString(base64String)
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// Swift Base64 Кодиране/Декодиране
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' Excel VBA Base64 Кодиране/Декодиране
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# R Base64 Кодиране/Декодиране
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% MATLAB Base64 Кодиране/Декодиране
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// C Base64 Кодиране/Декодиране с OpenSSL
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// Rust Base64 Кодиране/Декодиране
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
Гранични случаи и съображения
Когато работите с кодиране и декодиране на Base64, бъдете внимателни с тези важни съображения:
-
Юникод и не-ASCII символи: Когато кодирате текст с не-ASCII символи, уверете се, че използвате правилно кодиране на символи (обикновено UTF-8) преди кодиране на Base64.
-
Допълване: Стандартният Base64 използва допълване с "=" символи, за да гарантира, че дължината на изхода е кратна на 4. Някои реализации позволяват пропускане на допълнението, което може да предизвика проблеми с съвместимостта.
-
Нови редове: Традиционните реализации на Base64 вмъкват нови редове (обикновено на всеки 76 символа) за четимост, но съвременните приложения често ги пропускат.
-
URL-безопасен Base64: Стандартният Base64 използва "+" и "/" символи, които имат специални значения в URL адресите. За контексти на URL, използвайте URL-безопасен Base64, който заменя тези с "-" и "_".
-
Празни пространства: При декодиране, някои реализации са толерантни и игнорират празни пространства, докато други изискват точно вход.
-
Увеличение на размера: Кодиране на Base64 увеличава размера на данните с приблизително 33% (4 изходни байта за всеки 3 входни байта).
-
Производителност: Кодиране/декодиране на Base64 може да бъде изчислително интензивно за много големи данни. Обмислете поточни подходи за големи файлове.
Референции
Обратна връзка
Кликнете върху обратната връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които може да бъдат полезни за вашия работен процес