Base64-kodare och avkodare: Konvertera text till/från Base64
Gratis onlineverktyg för att koda text till Base64 eller avkoda Base64-strängar tillbaka till text. Stöder standard och URL-säker Base64-kodning med omedelbar konvertering.
Base64 Kodare/Dekodare
Konvertera text till och från Base64-kodning
Dokumentation
Base64-kodare och avkodare
Introduktion
Base64 är ett binärt-till-text kodningsschema som representerar binär data i ett ASCII-strängformat. Det är utformat för att överföra data som lagras i binära format över kanaler som endast pålitligt stöder textinnehåll. Base64-kodning konverterar binär data till en uppsättning av 64 tecken (därav namnet) som kan överföras säkert över textbaserade protokoll utan datakorruption.
Base64-teckenuppsättningen består av:
- Versaler A-Z (26 tecken)
- Gemener a-z (26 tecken)
- Siffror 0-9 (10 tecken)
- Två ytterligare tecken, vanligtvis "+" och "/" (2 tecken)
Detta verktyg gör att du enkelt kan koda text till Base64-format eller avkoda Base64-strängar tillbaka till deras ursprungliga text. Det är särskilt användbart för utvecklare, IT-professionella och alla som arbetar med data som behöver överföras säkert över textbaserade kanaler.
Hur Base64-kodning fungerar
Kodningsprocess
Base64-kodning fungerar genom att konvertera varje grupp av tre byte (24 bitar) av binär data till fyra Base64-tecken. Processen följer dessa steg:
- Konvertera den inmatade texten till dess binära representation (använda ASCII eller UTF-8-kodning)
- Gruppera den binära datan i bitar om 24 bitar (3 byte)
- Dela varje 24-bits chunk i fyra 6-bits grupper
- Konvertera varje 6-bits grupp till sitt motsvarande Base64-tecken
När inmatningslängden inte är delbar med 3, läggs padding med "=" tecken till för att bibehålla 4:3-förhållandet mellan ut- och inmatningslängder.
Matematisk representation
För en sekvens av byte , beräknas motsvarande Base64-tecken som:
Där representerar det :te tecknet i Base64-alphabetet.
Avkodningsprocess
Base64-avkodning reverserar kodningsprocessen:
- Konvertera varje Base64-tecken till sitt 6-bits värde
- Sammanfoga dessa 6-bits värden
- Gruppera bitarna i 8-bits chunkar (byte)
- Konvertera varje byte till sitt motsvarande tecken
Padding
När antalet byte som ska kodas inte är delbart med 3, tillämpas padding:
- Om det finns en byte kvar, konverteras den till två Base64-tecken följt av "=="
- Om det finns två byte kvar, konverteras de till tre Base64-tecken följt av "="
Exempel
Låt oss koda texten "Hello" till Base64:
- ASCII-representation av "Hello": 72 101 108 108 111
- Binär representation: 01001000 01100101 01101100 01101100 01101111
- Gruppering i 6-bits chunkar: 010010 000110 010101 101100 011011 000110 1111
- Den sista chunk har bara 4 bitar, så vi lägger till padding med nollor: 010010 000110 010101 101100 011011 000110 111100
- Konvertering till decimal: 18, 6, 21, 44, 27, 6, 60
- Sökning i Base64-alphabetet: S, G, V, s, b, G, 8
- Resultatet är "SGVsbG8="
Observera padding "=" i slutet eftersom inmatningslängden (5 byte) inte är delbar med 3.
Formel
Den allmänna formeln för att beräkna längden på en Base64-kodad sträng är:
Där representerar takfunktionen (avrundar upp till närmaste heltal).
Användningsområden
Base64-kodning används i stor utsträckning inom olika applikationer:
-
E-postbilagor: MIME (Multipurpose Internet Mail Extensions) använder Base64 för att koda binära bilagor i e-post.
-
Data-URL:er: Inbäddning av små bilder, typsnitt eller andra resurser direkt i HTML, CSS eller JavaScript med hjälp av
data:
URL-schemat. -
API-kommunikation: Säker överföring av binär data i JSON-payloads eller andra textbaserade API-format.
-
Lagring av binär data i textformat: När binär data behöver lagras i XML, JSON eller andra textbaserade format.
-
Autentiseringssystem: Basic Authentication i HTTP använder Base64-kodning (även om det inte är för säkerhet, bara för kodning).
-
Kryptografi: Som en del av olika kryptografiska protokoll och system, ofta för kodning av nycklar eller certifikat.
-
Cookie-värden: Kodning av komplexa datastrukturer för att lagras i cookies.
Alternativ
Även om Base64 är allmänt använt finns det alternativ som kan vara mer lämpliga i vissa situationer:
-
URL-säker Base64: En variant som använder "-" och "_" istället för "+" och "/" för att undvika problem med URL-kodning. Användbart för data som kommer att inkluderas i URL:er.
-
Base32: Använder en 32-teckensuppsättning, vilket resulterar i längre utdata men med bättre läsbarhet och skiftlägesokänslighet.
-
Hex-kodning: Enkel konvertering till hexadecimal, vilket är mindre effektivt (dubblar storleken) men mycket enkelt och allmänt stöds.
-
Binär överföring: För stora filer eller när effektivitet är avgörande, föredras direkta binära överföringsprotokoll som HTTP med lämpliga Content-Type-huvuden.
-
Komprimering + Base64: För stora textdata kan komprimering före kodning mildra storleksökningen.
-
JSON/XML-serialisering: För strukturerad data kan användning av inbyggd JSON- eller XML-serialisering vara mer lämplig än Base64-kodning.
Historia
Base64-kodning har sina rötter i tidig databehandling och telekommunikationssystem där binär data behövde överföras över kanaler som var avsedda för text.
Den formella specifikationen för Base64 publicerades först 1987 som en del av RFC 989, som definierade Privacy Enhanced Mail (PEM). Detta uppdaterades senare i RFC 1421 (1993) och RFC 2045 (1996, som en del av MIME).
Termen "Base64" kommer från det faktum att kodningen använder 64 olika ASCII-tecken för att representera binär data. Detta val av 64 tecken var avsiktligt, eftersom 64 är en potens av 2 (2^6), vilket gör konverteringen mellan binär och Base64 effektiv.
Med tiden har flera varianter av Base64 uppstått:
- Standard Base64: Som definierats i RFC 4648, använder A-Z, a-z, 0-9, +, / och = för padding
- URL-säker Base64: Använder - och _ istället för + och / för att undvika problem med URL-kodning
- Filnamn-säker Base64: Liknande URL-säker, designad för användning i filnamn
- Modifierad Base64 för IMAP: Används i IMAP-protokollet med en annan uppsättning specialtecken
Trots att den är över tre decennier gammal förblir Base64 ett grundläggande verktyg inom modern databehandling, särskilt med framväxten av webbapplikationer och API:er som i stor utsträckning förlitar sig på textbaserade dataformat som JSON.
Kodexempel
Här är exempel på Base64-kodning och avkodning i olika programmeringsspråk:
1// JavaScript Base64-kodning/avkodning
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("Ogiltig Base64-sträng");
11 }
12}
13
14// Exempelanvändning
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("Kodad:", encoded); // SGVsbG8sIFdvcmxkIQ==
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("Avkodad:", decoded); // Hello, World!
22} catch (error) {
23 console.error(error.message);
24}
25
1# Python Base64-kodning/avkodning
2import base64
3
4def encode_to_base64(text):
5 # Konvertera sträng till byte och sedan koda
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 # Konvertera base64-sträng till byte och sedan avkoda
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"Ogiltig Base64-sträng: {e}")
18
19# Exempelanvändning
20original_text = "Hello, World!"
21encoded = encode_to_base64(original_text)
22print(f"Kodad: {encoded}") # SGVsbG8sIFdvcmxkIQ==
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"Avkodad: {decoded}") # Hello, World!
27except ValueError as e:
28 print(e)
29
1// Java Base64-kodning/avkodning
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("Ogiltig Base64-sträng: " + 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("Kodad: " + encoded); // SGVsbG8sIFdvcmxkIQ==
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("Avkodad: " + decoded); // Hello, World!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// PHP Base64-kodning/avkodning
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("Ogiltig Base64-sträng");
11 }
12 return $decoded;
13}
14
15// Exempelanvändning
16$originalText = "Hello, World!";
17$encoded = encodeToBase64($originalText);
18echo "Kodad: " . $encoded . "\n"; // SGVsbG8sIFdvcmxkIQ==
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "Avkodad: " . $decoded . "\n"; // Hello, World!
23} catch (Exception $e) {
24 echo "Fel: " . $e->getMessage() . "\n";
25}
26?>
27
1// C# Base64-kodning/avkodning
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("Ogiltig Base64-sträng");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hello, World!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"Kodad: {encoded}"); // SGVsbG8sIFdvcmxkIQ==
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"Avkodad: {decoded}"); // Hello, World!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"Fel: {e.Message}");
40 }
41 }
42}
43
1# Ruby Base64-kodning/avkodning
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 "Ogiltig Base64-sträng: #{e.message}"
13 end
14end
15
16# Exempelanvändning
17original_text = "Hello, World!"
18encoded = encode_to_base64(original_text)
19puts "Kodad: #{encoded}" # SGVsbG8sIFdvcmxkIQ==
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "Avkodad: #{decoded}" # Hello, World!
24rescue StandardError => e
25 puts "Fel: #{e.message}"
26end
27
1// Go Base64-kodning/avkodning
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("ogiltig Base64-sträng: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hello, World!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("Kodad:", encoded) // SGVsbG8sIFdvcmxkIQ==
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("Fel:", err)
29 } else {
30 fmt.Println("Avkodad:", decoded) // Hello, World!
31 }
32}
33
1// Swift Base64-kodning/avkodning
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// Exempelanvändning
19let originalText = "Hello, World!"
20if let encoded = encodeToBase64(originalText) {
21 print("Kodad: \(encoded)") // SGVsbG8sIFdvcmxkIQ==
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("Avkodad: \(decoded)") // Hello, World!
25 } else {
26 print("Fel: Kunde inte avkoda Base64-sträng")
27 }
28} else {
29 print("Fel: Kunde inte koda text")
30}
31
1' Excel VBA Base64-kodning/avkodning
2' Notera: Detta kräver en referens till 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 = "Fel: Ogiltig Base64-sträng"
39End Function
40
41' Användning i ett kalkylblad:
42' =EncodeToBase64("Hello, World!")
43' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
44
1# R Base64-kodning/avkodning
2# Kräver paketet 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # Konvertera text till rå byte, sedan koda
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 # Konvertera base64-sträng till rå, sedan avkoda
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("Ogiltig Base64-sträng:", e$message))
21 })
22}
23
24# Exempelanvändning
25original_text <- "Hello, World!"
26encoded <- encode_to_base64(original_text)
27cat("Kodad:", encoded, "\n") # SGVsbG8sIFdvcmxkIQ==
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("Avkodad:", decoded, "\n") # Hello, World!
32}, error = function(e) {
33 cat("Fel:", e$message, "\n")
34})
35
1% MATLAB Base64-kodning/avkodning
2function demo_base64()
3 originalText = 'Hello, World!';
4
5 % Koda
6 encoded = encode_to_base64(originalText);
7 fprintf('Kodad: %s\n', encoded); % SGVsbG8sIFdvcmxkIQ==
8
9 % Avkoda
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('Avkodad: %s\n', decoded); % Hello, World!
13 catch e
14 fprintf('Fel: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % Konvertera text till uint8-array och koda
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % Avkoda base64-sträng till uint8-array
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('Ogiltig Base64-sträng');
31 end
32end
33
1// C Base64-kodning/avkodning med 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; // Ogiltig Base64-inmatning
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("Kodad: %s\n", encoded); // SGVsbG8sIFdvcmxkIQ==
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("Avkodad: %s\n", decoded); // Hello, World!
65 free(decoded);
66 } else {
67 printf("Fel: Ogiltig Base64-sträng\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// Rust Base64-kodning/avkodning
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!("Ogiltig UTF-8-sekvens: {}", e))
15 }
16 },
17 Err(e) => Err(format!("Ogiltig Base64-sträng: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hello, World!";
23 let encoded = encode_to_base64(original_text);
24 println!("Kodad: {}", encoded); // SGVsbG8sIFdvcmxkIQ==
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("Avkodad: {}", decoded), // Hello, World!
28 Err(e) => println!("Fel: {}", e)
29 }
30}
31
Kantsituationer och överväganden
När du arbetar med Base64-kodning och avkodning, var medveten om dessa viktiga överväganden:
-
Unicode och icke-ASCII-tecken: När du kodar text med icke-ASCII-tecken, se till att använda korrekt teckenkodning (vanligtvis UTF-8) innan Base64-kodning.
-
Padding: Standard Base64 använder padding med "=" tecken för att säkerställa att utdata längden är en multipel av 4. Vissa implementationer tillåter att padding utelämnas, vilket kan orsaka kompatibilitetsproblem.
-
Radbrytningar: Traditionella Base64-implementationer infogar radbrytningar (vanligtvis varje 76 tecken) för läsbarhet, men moderna applikationer utelämnar ofta dessa.
-
URL-säker Base64: Standard Base64 använder "+" och "/" tecken som har speciella betydelser i URL:er. För URL-kontexter, använd URL-säker Base64 som ersätter dessa med "-" och "_".
-
Whitespace: Vid avkodning är vissa implementationer tillåtande och ignorerar whitespace, medan andra kräver exakt inmatning.
-
Storleksökning: Base64-kodning ökar storleken på data med cirka 33% (4 utdata byte för varje 3 indata byte).
-
Prestanda: Base64-kodning/avkodning kan vara beräkningsintensiv för mycket stora data. Överväg strömmande metoder för stora filer.
Referenser
Återkoppling
Klicka på återkopplingsmeddelandet för att börja ge återkoppling om detta verktyg
Relaterade verktyg
Upptäck fler verktyg som kan vara användbara för ditt arbetsflöde