Base64 kódovač a dekodér: Převod textu na/nebo Base64
Bezplatný online nástroj pro kódování textu do Base64 nebo dekódování Base64 řetězců zpět na text. Podporuje standardní a URL-bezpečné Base64 kódování s okamžitou konverzí.
Base64 Kódovač/Decodér
Převeďte text na a z Base64 kódování
Dokumentace
Encoder a dekodér Base64
Úvod
Base64 je kódovací schéma pro převod binárních dat na text, které reprezentuje binární data v ASCII formátu. Je navrženo tak, aby přenášelo data uložená v binárních formátech přes kanály, které spolehlivě podporují pouze textový obsah. Kódování Base64 převádí binární data na sadu 64 znaků (odtud název), které mohou být bezpečně přenášeny přes textové protokoly bez poškození dat.
Sada znaků Base64 se skládá z:
- Velkých písmen A-Z (26 znaků)
- Malých písmen a-z (26 znaků)
- Čísel 0-9 (10 znaků)
- Dva další znaky, obvykle "+" a "/" (2 znaky)
Tento nástroj vám umožňuje snadno kódovat text do formátu Base64 nebo dekódovat Base64 řetězce zpět do jejich původního textu. Je obzvlášť užitečný pro vývojáře, IT profesionály a každého, kdo pracuje s daty, která je třeba bezpečně přenášet přes textové kanály.
Jak funguje kódování Base64
Proces kódování
Kódování Base64 funguje tak, že převádí každou skupinu tří bytů (24 bitů) binárních dat na čtyři znaky Base64. Proces probíhá podle těchto kroků:
- Převeďte vstupní text na jeho binární reprezentaci (používající ASCII nebo UTF-8 kódování)
- Skupinujte binární data do bloků po 24 bitech (3 byty)
- Rozdělte každý 24-bitový blok na čtyři 6-bitové skupiny
- Převeďte každou 6-bitovou skupinu na odpovídající Base64 znak
Pokud délka vstupu není dělitelná třemi, přidává se padding s "=" znaky, aby se udržel poměr 4:3 mezi délkou výstupu a vstupu.
Matematická reprezentace
Pro sekvenci bytů jsou odpovídající Base64 znaky vypočítány jako:
Kde představuje -tý znak v abecedě Base64.
Proces dekódování
Dekódování Base64 obrací proces kódování:
- Převeďte každý Base64 znak na jeho 6-bitovou hodnotu
- Spojte tyto 6-bitové hodnoty
- Skupinujte bity do 8-bitových bloků (bytů)
- Převeďte každý byt na odpovídající znak
Padding
Když je počet bytů kódování dělitelný třemi, aplikuje se padding:
- Pokud zbývá jeden byt, převede se na dva Base64 znaky následované "=="
- Pokud zbývají dva byty, převedou se na tři Base64 znaky následované "="
Příklad
Pojďme kódovat text "Hello" do Base64:
- ASCII reprezentace "Hello": 72 101 108 108 111
- Binární reprezentace: 01001000 01100101 01101100 01101100 01101111
- Skupinování do 6-bitových bloků: 010010 000110 010101 101100 011011 000110 1111
- Poslední blok má pouze 4 bity, takže přidáme nuly: 010010 000110 010101 101100 011011 000110 111100
- Převedení na desetinné číslo: 18, 6, 21, 44, 27, 6, 60
- Hledání v abecedě Base64: S, G, V, s, b, G, 8
- Výsledek je "SGVsbG8="
Všimněte si paddingu "=" na konci, protože délka vstupu (5 bytů) není dělitelná třemi.
Vzorec
Obecný vzorec pro výpočet délky Base64 kódovaného řetězce je:
Kde představuje funkci zaokrouhlení nahoru (zaokrouhlení na nejbližší celé číslo).
Případy použití
Kódování Base64 se široce používá v různých aplikacích:
-
E-mailové přílohy: MIME (Multipurpose Internet Mail Extensions) používá Base64 kódování pro kódování binárních příloh v e-mailech.
-
Data URL: Vkládání malých obrázků, písem nebo jiných zdrojů přímo do HTML, CSS nebo JavaScriptu pomocí schématu URL
data:
. -
API komunikace: Bezpečné přenášení binárních dat v JSON datech nebo jiných textových API formátech.
-
Ukládání binárních dat v textových formátech: Když je třeba binární data uložit v XML, JSON nebo jiných textových formátech.
-
Systémy ověřování: Základní ověřování v HTTP používá kódování Base64 (i když to není pro bezpečnost, pouze pro kódování).
-
Kryptografie: Jako součást různých kryptografických protokolů a systémů, často pro kódování klíčů nebo certifikátů.
-
Hodnoty cookies: Kódování složitých datových struktur pro ukládání do cookies.
Alternativy
I když je Base64 široce používáno, existují alternativy, které mohou být vhodnější v určitých situacích:
-
URL-safe Base64: Varianta, která používá "-" a "_" místo "+" a "/" aby se předešlo problémům s kódováním URL. Užitečné pro data, která budou zahrnuta v URL.
-
Base32: Používá 32 znaků, což vede k delšímu výstupu, ale s lepší čitelností pro lidi a bez závislosti na velikosti písmen.
-
Hex kódování: Jednoduchá konverze na hexadecimální, která je méně efektivní (zdvojnásobuje velikost), ale velmi jednoduchá a široce podporovaná.
-
Binární přenos: Pro velké soubory nebo když je efektivita klíčová, jsou preferovány přímé binární přenosové protokoly jako HTTP s odpovídajícími hlavičkami Content-Type.
-
Kompresní + Base64: Pro velká textová data může komprese před kódováním zmírnit nárůst velikosti.
-
JSON/XML serializace: Pro strukturovaná data může být použití nativní JSON nebo XML serializace vhodnější než kódování Base64.
Historie
Kódování Base64 má své kořeny v raném počítačovém a telekomunikačním systému, kde bylo třeba přenášet binární data přes kanály navržené pro text.
Formální specifikace Base64 byla poprvé zveřejněna v roce 1987 jako součást RFC 989, která definovala Privacy Enhanced Mail (PEM). To bylo později aktualizováno v RFC 1421 (1993) a RFC 2045 (1996, jako součást MIME).
Termín "Base64" pochází z toho, že kódování používá 64 různých ASCII znaků k reprezentaci binárních dat. Tento výběr 64 znaků byl záměrný, protože 64 je mocnina 2 (2^6), což činí převod mezi binárními a Base64 efektivním.
V průběhu času se objevily různé varianty Base64:
- Standardní Base64: Jak je definováno v RFC 4648, používající A-Z, a-z, 0-9, +, / a = pro padding
- URL-safe Base64: Používá - a _ místo + a / aby se předešlo problémům s kódováním URL
- Bezpečná Base64 pro názvy souborů: Podobná URL-safe, navržená pro použití v názvech souborů
- Modifikovaná Base64 pro IMAP: Používá se v protokolu IMAP s jinou sadou speciálních znaků
Navzdory tomu, že je Base64 více než tři desetiletí staré, zůstává základním nástrojem v moderním počítačovém prostředí, zejména s nárůstem webových aplikací a API, které se silně spoléhají na textové datové formáty jako JSON.
Příklady kódu
Zde jsou příklady kódování a dekódování Base64 v různých programovacích jazycích:
1// JavaScript Base64 Kódování/Dekódování
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("Neplatný Base64 řetězec");
11 }
12}
13
14// Příklad použití
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("Kódováno:", encoded); // SGVsbG8sIFdvcmxkIQ==
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("Dekódováno:", decoded); // Hello, World!
22} catch (error) {
23 console.error(error.message);
24}
25
1# Python Base64 Kódování/Dekódování
2import base64
3
4def encode_to_base64(text):
5 # Převeďte řetězec na byty a pak kódujte
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 # Převeďte base64 řetězec na byty a pak dekódujte
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"Neplatný Base64 řetězec: {e}")
18
19# Příklad použití
20original_text = "Hello, World!"
21encoded = encode_to_base64(original_text)
22print(f"Kódováno: {encoded}") # SGVsbG8sIFdvcmxkIQ==
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"Dekódováno: {decoded}") # Hello, World!
27except ValueError as e:
28 print(e)
29
1// Java Base64 Kódování/Dekódování
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("Neplatný Base64 řetězec: " + 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("Kódováno: " + encoded); // SGVsbG8sIFdvcmxkIQ==
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("Dekódováno: " + decoded); // Hello, World!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// PHP Base64 Kódování/Dekódování
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("Neplatný Base64 řetězec");
11 }
12 return $decoded;
13}
14
15// Příklad použití
16$originalText = "Hello, World!";
17$encoded = encodeToBase64($originalText);
18echo "Kódováno: " . $encoded . "\n"; // SGVsbG8sIFdvcmxkIQ==
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "Dekódováno: " . $decoded . "\n"; // Hello, World!
23} catch (Exception $e) {
24 echo "Chyba: " . $e->getMessage() . "\n";
25}
26?>
27
1// C# Base64 Kódování/Dekódování
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("Neplatný Base64 řetězec");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hello, World!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"Kódováno: {encoded}"); // SGVsbG8sIFdvcmxkIQ==
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"Dekódováno: {decoded}"); // Hello, World!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"Chyba: {e.Message}");
40 }
41 }
42}
43
1# Ruby Base64 Kódování/Dekódování
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 "Neplatný Base64 řetězec: #{e.message}"
13 end
14end
15
16# Příklad použití
17original_text = "Hello, World!"
18encoded = encode_to_base64(original_text)
19puts "Kódováno: #{encoded}" # SGVsbG8sIFdvcmxkIQ==
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "Dekódováno: #{decoded}" # Hello, World!
24rescue StandardError => e
25 puts "Chyba: #{e.message}"
26end
27
1// Go Base64 Kódování/Dekódování
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("neplatný Base64 řetězec: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hello, World!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("Kódováno:", encoded) // SGVsbG8sIFdvcmxkIQ==
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("Chyba:", err)
29 } else {
30 fmt.Println("Dekódováno:", decoded) // Hello, World!
31 }
32}
33
1// Swift Base64 Kódování/Dekódování
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// Příklad použití
19let originalText = "Hello, World!"
20if let encoded = encodeToBase64(originalText) {
21 print("Kódováno: \(encoded)") // SGVsbG8sIFdvcmxkIQ==
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("Dekódováno: \(decoded)") // Hello, World!
25 } else {
26 print("Chyba: Nelze dekódovat Base64 řetězec")
27 }
28} else {
29 print("Chyba: Nelze kódovat text")
30}
31
1' Excel VBA Base64 Kódování/Dekódování
2' Poznámka: To vyžaduje odkaz na 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 = "Chyba: Neplatný Base64 řetězec"
39End Function
40
41' Použití v pracovním listu:
42' =EncodeToBase64("Hello, World!")
43' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
44
1# R Base64 Kódování/Dekódování
2# Vyžaduje balíček 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # Převeďte text na surové byty, pak kódujte
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 # Převeďte base64 řetězec na surové, pak dekódujte
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("Neplatný Base64 řetězec:", e$message))
21 })
22}
23
24# Příklad použití
25original_text <- "Hello, World!"
26encoded <- encode_to_base64(original_text)
27cat("Kódováno:", encoded, "\n") # SGVsbG8sIFdvcmxkIQ==
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("Dekódováno:", decoded, "\n") # Hello, World!
32}, error = function(e) {
33 cat("Chyba:", e$message, "\n")
34})
35
1% MATLAB Base64 Kódování/Dekódování
2function demo_base64()
3 originalText = 'Hello, World!';
4
5 % Kódování
6 encoded = encode_to_base64(originalText);
7 fprintf('Kódováno: %s\n', encoded); % SGVsbG8sIFdvcmxkIQ==
8
9 % Dekódování
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('Dekódováno: %s\n', decoded); % Hello, World!
13 catch e
14 fprintf('Chyba: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % Převeďte text na uint8 pole a kódujte
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % Dekódujte base64 řetězec na uint8 pole
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('Neplatný Base64 řetězec');
31 end
32end
33
1// C Base64 Kódování/Dekódování pomocí 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; // Neplatný Base64 vstup
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("Kódováno: %s\n", encoded); // SGVsbG8sIFdvcmxkIQ==
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("Dekódováno: %s\n", decoded); // Hello, World!
65 free(decoded);
66 } else {
67 printf("Chyba: Neplatný Base64 řetězec\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// Rust Base64 Kódování/Dekódování
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!("Neplatná UTF-8 sekvence: {}", e))
15 }
16 },
17 Err(e) => Err(format!("Neplatný Base64 řetězec: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hello, World!";
23 let encoded = encode_to_base64(original_text);
24 println!("Kódováno: {}", encoded); // SGVsbG8sIFdvcmxkIQ==
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("Dekódováno: {}", decoded), // Hello, World!
28 Err(e) => println!("Chyba: {}", e)
29 }
30}
31
Okrajové případy a úvahy
Při práci s kódováním a dekódováním Base64 mějte na paměti tyto důležité úvahy:
-
Unicode a znaky mimo ASCII: Při kódování textu s ne-ASCII znaky se ujistěte o správném kódování znaků (obvykle UTF-8) před kódováním Base64.
-
Padding: Standardní Base64 používá padding s "=" znaky, aby se zajistilo, že délka výstupu je násobkem 4. Některé implementace umožňují vynechat padding, což může způsobit problémy s kompatibilitou.
-
Zalamování řádků: Tradiční implementace Base64 vkládají zalamování řádků (obvykle každých 76 znaků) pro čitelnost, ale moderní aplikace často tyto vynechávají.
-
URL-Safe Base64: Standardní Base64 používá "+" a "/" znaky, které mají v URL speciální významy. Pro kontexty URL použijte URL-safe Base64, která tyto znaky nahrazuje "-" a "_".
-
Bílý prostor: Při dekódování některé implementace jsou shovívavé a ignorují bílý prostor, zatímco jiné vyžadují přesný vstup.
-
Nárůst velikosti: Kódování Base64 zvyšuje velikost dat přibližně o 33% (4 výstupní byty na každé 3 vstupní byty).
-
Výkon: Kódování/dekódování Base64 může být výpočetně náročné pro velmi velká data. Zvažte přístup ke streamování pro velké soubory.
Odkazy
Zpětná vazba
Klikněte na toast se zpětnou vazbou a začněte dávat zpětnou vazbu o tomto nástroji
Související nástroje
Objevte další nástroje, které by mohly být užitečné pro váš pracovní postup