Movatterモバイル変換


[0]ホーム

URL:


Jump to content
Rosetta Code
Search

Base64 decode data

From Rosetta Code
Task
Base64 decode data
You are encouraged tosolve this task according to the task description, using any language you may know.

SeeBase64 encode data.

Now write a program that takes the output of theBase64 encode data task as input and regenerate the original file.

When working on the VBA implementation I found several 'solutions' on the net, including one from the software maker himself, that showed output with incorrect padding. Obviously with incorrect padding in the output you can not decode correctly to the original file again.

Action!

BYTE FUNC FindIndex(BYTE b)  IF b>='A AND b<='Z THEN    RETURN (b-'A)  ELSEIF b>='a AND b<='z THEN    RETURN (b-'a+26)  ELSEIF b>='0 AND b<='9 THEN    RETURN (b-'0+52)  ELSEIF b='+ THEN    RETURN (62)  ELSEIF b='/ THEN    RETURN (63)  FIRETURN (-1)PROC PrintChar(CHAR c)  IF c=10 THEN    PutE()  ELSE    Put(c)  FIRETURNPROC Decode(CHAR ARRAY s)  BYTE i,b1,b2,b3,b4,i1,i2,i3,i4  CHAR c  IF s(0) MOD 4#0 THEN    PrintE("Invalid length of string!!!")    Break()  FI  i=1  WHILE i<=s(0)  DO    b1=s(i) i==+1    b2=s(i) i==+1    b3=s(i) i==+1    b4=s(i) i==+1    i1=FindIndex(b1)    i2=FindIndex(b2)    c=i1 LSH 2    c==%i2 RSH 4    PrintChar(c)    IF b3#'= THEN      i3=FindIndex(b3)      c=(i2&$0F) LSH 4      c==%i3 RSH 2      PrintChar(c)      IF b4#'= THEN        i4=FindIndex(b4)        c=(i3&$03) LSH 6        c==%i4        PrintChar(c)      FI    FI  ODRETURNPROC Test(CHAR ARRAY s)  PrintE("Encoded:")  PrintE(s)  PutE()  PrintE("Decoded:")  Decode(s)  PutE()RETURNPROC Main()  Test("VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo")RETURN
Output:

Screenshot from Atari 8-bit computer

Encoded:VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoDecoded:To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Ada

Library:AWS
withAda.Text_IO;withAWS.Translator;procedureDecode_AWSisInput:constantString:="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVw"&"IHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";Result:constantString:=AWS.Translator.Base64_Decode(Input);beginAda.Text_IO.Put_Line(Input);Ada.Text_IO.New_Line;Ada.Text_IO.Put_Line(Result);endDecode_AWS;
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Arturo

text:"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="printdecodetext
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Bash

Translation of:Bash
#! /bin/bashdeclare-aencodeTable=(# +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :62-1-1-16352535455565758596061-1# ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J-1-1-1-1-1-10123456789# K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z10111213141516171819202122232425# [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j-1-1-1-1-1-126272829303132333435# k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z36373839404142434445464748495051)functiona2b6(){if[$1-lt43-o$1-gt122]thenecho-1elseecho${encodeTable[$(($1-43))]}fi}functionflush(){for((k=2;k>=4-CNT;k--))do((b8=BUF>>(k*8)&255))printf-vHEX%x$b8printf\\x$HEXdone}whilereadINPUTdofor((i=0;i<${#INPUT};i++))doprintf-vNUM%d"'${INPUT:$i:1}"if((NUM==61))thenflushexit0elseDEC=$(a2b6$NUM)if((DEC>=0))then((BUF|=DEC<<6*(3-CNT)))if((++CNT==4))thenflush((CNT=0,BUF=0))fififidonedone

BASIC

BaCon

Using the result from theBase64 encode data task as requested, but the result is abbreviated in the code below.

data$ = "AAABAAIAEBAAAAAAAABoBQAAJgAAACAgAAAAAAAAqAgAAI4FAAAoAAAAE.......QAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE="ico$ = B64DEC$(data$)BSAVE ico$ TO "favicon.ico" SIZE LEN(ico$)

Batch File

Using the temp file produced byBase64 encode data#Batch File:

certutil -f -decodehex"%temp%\favicon.tmp" favicon1.ico 1fc /B favicon.ico favicon1.ico
Output:
Input Length = 20116Output Length = 15086CertUtil: -decodehex command completed successfully.Comparing files favicon.ico and FAVICON1.ICOFC: no differences encountered

BQN

m64⋆↕4d⌽÷256⋆↕3Decode256|·d×·+´m×⊢sym"Aa0+/"+¨26261011B64Dec@+·(0.75×≠)(Decode˘4⥊⊢)64(>/⊢)sym⊐⊢B64Dec"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="
Output:
"To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich"

C

Translation of:C++
#include<stdio.h>#include<stdlib.h>typedefunsignedcharubyte;constubyteBASE64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";intfindIndex(constubyteval){if('A'<=val&&val<='Z'){returnval-'A';}if('a'<=val&&val<='z'){returnval-'a'+26;}if('0'<=val&&val<='9'){returnval-'0'+52;}if(val=='+'){return62;}if(val=='/'){return63;}return-1;}intdecode(constubytesource[],ubytesink[]){constsize_tlength=strlen(source);constubyte*it=source;constubyte*end=source+length;intacc;if(length%4!=0){return1;}while(it!=end){constubyteb1=*it++;constubyteb2=*it++;constubyteb3=*it++;// might be the first padding byteconstubyteb4=*it++;// might be the first or second padding byteconstinti1=findIndex(b1);constinti2=findIndex(b2);acc=i1<<2;// six bits came from the first byteacc|=i2>>4;// two bits came from the first byte*sink++=acc;// output the first byteif(b3!='='){constinti3=findIndex(b3);acc=(i2&0xF)<<4;// four bits came from the second byteacc+=i3>>2;// four bits came from the second byte*sink++=acc;// output the second byteif(b4!='='){constinti4=findIndex(b4);acc=(i3&0x3)<<6;// two bits came from the third byteacc|=i4;// six bits came from the third byte*sink++=acc;// output the third byte}}}*sink='\0';// add the sigil for end of stringreturn0;}intmain(){ubytedata[]="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo";ubytedecoded[1024];printf("%s\n\n",data);decode(data,decoded);printf("%s\n\n",decoded);return0;}
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoTo err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

C#

Translation of:Visual Basic .NET
usingSystem;usingSystem.Text;namespaceBase64DecodeData{classProgram{staticvoidMain(string[]args){vardata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";Console.WriteLine(data);Console.WriteLine();vardecoded=Encoding.ASCII.GetString(Convert.FromBase64String(data));Console.WriteLine(decoded);}}}
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

C++

Works with:C++14
#include<algorithm>#include<iostream>#include<string>#include<vector>typedefunsignedcharubyte;constautoBASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";std::vector<ubyte>encode(conststd::vector<ubyte>&source){autoit=source.cbegin();autoend=source.cend();std::vector<ubyte>sink;while(it!=end){autob1=*it++;intacc;sink.push_back(BASE64[b1>>2]);// first output (first six bits from b1)acc=(b1&0x3)<<4;// last two bits from b1if(it!=end){autob2=*it++;acc|=(b2>>4);// first four bits from b2sink.push_back(BASE64[acc]);// second outputacc=(b2&0xF)<<2;// last four bits from b2if(it!=end){autob3=*it++;acc|=(b3>>6);// first two bits from b3sink.push_back(BASE64[acc]);// third outputsink.push_back(BASE64[b3&0x3F]);// fouth output (final six bits from b3)}else{sink.push_back(BASE64[acc]);// third outputsink.push_back('=');// fourth output (1 byte padding)}}else{sink.push_back(BASE64[acc]);// second outputsink.push_back('=');// third output (first padding byte)sink.push_back('=');// fourth output (second padding byte)}}returnsink;}intfindIndex(ubyteval){if('A'<=val&&val<='Z'){returnval-'A';}if('a'<=val&&val<='z'){returnval-'a'+26;}if('0'<=val&&val<='9'){returnval-'0'+52;}if('+'==val){return62;}if('/'==val){return63;}return-1;}std::vector<ubyte>decode(conststd::vector<ubyte>&source){if(source.size()%4!=0){thrownewstd::runtime_error("Error in size to the decode method");}autoit=source.cbegin();autoend=source.cend();std::vector<ubyte>sink;while(it!=end){autob1=*it++;autob2=*it++;autob3=*it++;// might be first padding byteautob4=*it++;// might be first or second padding byteautoi1=findIndex(b1);autoi2=findIndex(b2);autoacc=i1<<2;// six bits came from the first byteacc|=i2>>4;// two bits came from the first bytesink.push_back(acc);// output the first byteif(b3!='='){autoi3=findIndex(b3);acc=(i2&0xF)<<4;// four bits came from the second byteacc|=i3>>2;// four bits came from the second bytesink.push_back(acc);// output the second byteif(b4!='='){autoi4=findIndex(b4);acc=(i3&0x3)<<6;// two bits came from the third byteacc|=i4;// six bits came from the third bytesink.push_back(acc);// output the third byte}}}returnsink;}intmain(){usingnamespacestd;stringdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo";vector<ubyte>datav{begin(data),end(data)};cout<<data<<"\n\n"<<decode(datav).data()<<endl;return0;}
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoTo err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Caché ObjectScript

USER>Write $System.Encryption.Base64Decode("VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=")To err is human, but to really foul things up you need a computer.                                                                      -- Paul R. Ehrlich

Clojure

(defndecode[str](String.(.decode(java.util.Base64/getDecoder)str)))(decode"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=")
Output:
"To err is human, but to really foul things up you need a computer.\n    -- Paul R. Ehrlich"

Common Lisp

Similar to theBASE64 encoding task I am using thecl-base64 library.

(eval-when(:load-toplevel:compile-toplevel:execute)(ql:quickload"cl-base64"));; * The package definition(defpackage:base64-decode(:use:common-lisp:cl-base64))(in-package:base64-decode);; * The encoded data(defvar*base64-data*"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""See BASE64-ENCODE for the origin of this data. http://rosettacode.org/wiki/Base64_encode_data");; * The function(defunbase64-decode(&optional(data*base64-data*)(file#p"favicon-2.ico"))"Returns the original FILE BASE64 encoded in DATA."(with-open-file(streamfile:direction:output:element-type'unsigned-byte:if-exists:supersede:if-does-not-exist:create)(let*((array(base64-string-to-usb8-arraydata))(len(lengtharray)))(write-sequencearraystream)(formatt"Wrote ~D bytes in file ~A~%"lenfile))))
Output:
Wrote 3638 bytes in file favicon-2.ico

Crystal

require"base64"encoded_string="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="decoded_string=Base64.decode_string(encoded_string)putsdecoded_string
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

D

Translation of:Raku
importstd.base64;importstd.stdio;voidmain(){autodata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";writeln(data);writeln;autodecoded=cast(char[])Base64.decode(data);writeln(decoded);}
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Dart

import'dart:convert';voidmain(){varencoded="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";vardecoded=utf8.decode(base64.decode(encoded));print(decoded);}
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Delphi

programBase64Decoder;{$APPTYPE CONSOLE}usesSystem.SysUtils,System.NetEncoding;constSrc='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=';beginWriteLn(Format('Source string: '+sLineBreak+'"%s"',[Src]));WriteLn(Format('Decoded string: '+sLineBreak+'"%s"',[TNetEncoding.Base64.Decode(Src)]));end.
Output:
Source string:"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="Decoded string:"To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich"

DuckDB

duckdb -noheader -list <<EOF> with s as (from read_blob('favicon.ico') _(s))> select s = to_base64(s::BLOB).from_base64() from s;> EOFtrue

Ecstasy

/** * This implementation is encapsulated as Base64Format in the web.xtclang.org module, * but the module is currently in flux, so the implementation is included "inline" here. */moduleBase64{@InjectConsoleconsole;voidrun(){Stringorig=\|VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIH\|lvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=;Byte[]bytes=decode(orig);Stringtext=encode(bytes,pad=True);asserttext==orig;console.print($"base64={text}, bytes={bytes}");}staticByte[]read(Iterator<Char>stream){IntcharLen=0;charLen:=stream.knownSize();Byte[]byteBuf=newByte[](charLen*6/8);ByteprevBits=0;IntprevCount=0;while(Charch:=stream.next()){if(BytenewBits:=isBase64(ch,assertTrash=True)){if(prevCount==0){prevBits=newBits;prevCount=6;}else{byteBuf.add((prevBits<<8-prevCount)|(newBits>>prevCount-2));prevBits=newBits;prevCount-=2;}}}returnbyteBuf.freeze(True);}staticvoidwrite(Byte[]value,Appender<Char>stream,Booleanpad=False,Int?lineLength=Null){lineLength?:=Int.MaxValue;IntlineOffset=0;InttotalChars=0;ByteprevByte=0;IntprevCount=0;// number of leftover bits from the previous byteIntbyteOffset=0;IntbyteLength=value.size;while(True){// glue together the next six bits, which will create one character of outputBytesixBits;if(byteOffset>=byteLength){if(prevCount==0){break;}sixBits=prevByte<<6-prevCount;prevCount=0;}elseif(prevCount==6){sixBits=prevByte<<6-prevCount;prevCount=0;}else{BytenextByte=value[byteOffset++];sixBits=(prevByte<<6-prevCount)|(nextByte>>2+prevCount);prevByte=nextByte;prevCount+=2;}if(lineOffset>=lineLength){stream.add('\r').add('\n');totalChars+=lineOffset;lineOffset=0;}stream.add(base64(sixBits&0b111111));++lineOffset;}if(pad){totalChars+=lineOffset;for(Inti=0,IntpadCount=4-(totalChars&0b11)&0b11;i<padCount;++i){if(lineOffset>=lineLength){stream.add('\r').add('\n');lineOffset=0;}stream.add('=');++lineOffset;}}}staticStringencode(Byte[]value,Booleanpad=False,Int?lineLength=Null){// calculate buffer sizeIntbyteLen=value.size;IntcharLen=(byteLen*8+5)/6;if(pad){charLen+=4-(charLen&0b11)&0b11;}if(lineLength!=Null){charLen+=((charLen+lineLength-1)/lineLength-1).maxOf(0)*2;}StringBuffercharBuf=newStringBuffer(charLen);write(value,charBuf,pad,lineLength);returncharBuf.toString();}staticByte[]decode(Stringtext){IntcharLen=text.size;Byte[]byteBuf=newByte[](charLen*6/8);ByteprevBits=0;IntprevCount=0;for(Intoffset=0;offset<charLen;++offset){if(BytenewBits:=isBase64(text[offset],assertTrash=True)){if(prevCount==0){prevBits=newBits;prevCount=6;}else{byteBuf.add((prevBits<<8-prevCount)|(newBits>>prevCount-2));prevBits=newBits;prevCount-=2;}}}returnbyteBuf.freeze(True);}/**     * Translate a single Base64 character to the least significant 6 bits of a `Byte` value.     *     * @param ch  the Base64 character; no pad or newlines allowed     *     * @return the value in the range `0 ..< 64`     */staticBytevalOf(Charch){returnswitch(ch){case'A'..'Z':(ch-'A').toUInt8();case'a'..'z':(ch-'a').toUInt8()+26;case'0'..'9':(ch-'0').toUInt8()+52;case'+':62;case'/':63;case'=':assertas$"Unexpected padding character in Base64: {ch.quoted()}";case'\r','\n':assertas$"Unexpected newline character in Base64: {ch.quoted()}";default:assertas$"Invalid Base64 character: {ch.quoted()}";};}/**     * Translate a single Base64 character to the least significant 6 bits of a `Byte` value.     *     * @param ch           the character to test if it is Base64     * @param assertTrash  (optional) pass True to assert on illegal Base64 characters     *     * @return the value in the range `0 ..< 64`     */staticconditionalByteisBase64(Charch,BooleanassertTrash=False){returnswitch(ch){case'A'..'Z':(True,(ch-'A').toUInt8());case'a'..'z':(True,(ch-'a').toUInt8()+26);case'0'..'9':(True,(ch-'0').toUInt8()+52);case'+':(True,62);case'/':(True,63);case'=':// "pad" sometimes allowed (or required) at endcase'\r','\n':// newlines sometimes allowed (or required)False;default:assertTrash?assertas$"Invalid Base64 character: {ch.quoted()}":False;};}/**     * Convert the passed byte value to a Base64 character.     *     * @param the byte value, which must be in the range `0..63`     *     * @return the Base64 character     */staticCharbase64(Bytebyte){returnswitch(byte){case0..<26:'A'+byte;case26..<52:'a'+(byte-26);case52..<62:'0'+(byte-52);case62:'+';case63:'/';default:assert:boundsas$"byte={byte}";};}}
Output:
base64=VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=, bytes=0x546F206572722069732068756D616E2C2062757420746F207265616C6C7920666F756C207468696E677320757020796F75206E656564206120636F6D70757465722E0A202020202D2D205061756C20522E204568726C696368

Ed

This solution essentially hardcodes both Base64 chars and the byte->ASCII transformation, becauseEd has no way to transform things other than text substitution. Still, the implementation is less than 200 lines long, which is a pretty compact script.

Also note that this only processes graphical chars of 7-bit ASCII—ed doesn't explicitly work with control chars. And going beyond 127 is system-dependent, so here we are.

H,pg/.*/s/\B/ /gg/\b=\b/s// 000000 /gg/\bA\b/s// 000000 /gg/\bB\b/s// 000001 /gg/\bC\b/s// 000010 /gg/\bD\b/s// 000011 /gg/\bE\b/s// 000100 /gg/\bF\b/s// 000101 /gg/\bG\b/s// 000110 /gg/\bH\b/s// 000111 /gg/\bI\b/s// 001000 /gg/\bJ\b/s// 001001 /gg/\bK\b/s// 001010 /gg/\bL\b/s// 001011 /gg/\bM\b/s// 001100 /gg/\bN\b/s// 001101 /gg/\bO\b/s// 001110 /gg/\bP\b/s// 001111 /gg/\bQ\b/s// 010000 /gg/\bR\b/s// 010001 /gg/\bS\b/s// 010010 /gg/\bT\b/s// 010011 /gg/\bU\b/s// 010100 /gg/\bV\b/s// 010101 /gg/\bW\b/s// 010110 /gg/\bX\b/s// 010111 /gg/\bY\b/s// 011000 /gg/\bZ\b/s// 011001 /gg/\ba\b/s// 011010 /gg/\bb\b/s// 011011 /gg/\bc\b/s// 011100 /gg/\bd\b/s// 011101 /gg/\be\b/s// 011110 /gg/\bf\b/s// 011111 /gg/\bg\b/s// 100000 /gg/\bh\b/s// 100001 /gg/\bi\b/s// 100010 /gg/\bj\b/s// 100011 /gg/\bk\b/s// 100100 /gg/\bl\b/s// 100101 /gg/\bm\b/s// 100110 /gg/\bn\b/s// 100111 /gg/\bo\b/s// 101000 /gg/\bp\b/s// 101001 /gg/\bq\b/s// 101010 /gg/\br\b/s// 101011 /gg/\bs\b/s// 101100 /gg/\bt\b/s// 101101 /gg/\bu\b/s// 101110 /gg/\bv\b/s// 101111 /gg/\bw\b/s// 110000 /gg/\bx\b/s// 110001 /gg/\by\b/s// 110010 /gg/\bz\b/s// 110011 /gg/\b0\b/s// 110100 /gg/\b1\b/s// 110101 /gg/\b2\b/s// 110110 /gg/\b3\b/s// 110111 /gg/\b4\b/s// 111000 /gg/\b5\b/s// 111001 /gg/\b6\b/s// 111010 /gg/\b7\b/s// 111011 /gg/\b8\b/s// 111100 /gg/\b9\b/s// 111101 /gg/\b=\b/s// 000000 /gg/\b\+\b/s// 111110 /gg/\b\/\b/s// 111111 /gg/[[:space:]]/s///gg/[01]{8}/s// & /gg/00000000/s///gg/00001010/s//\/gg/00100000/s// /gg/00100001/s//!/gg/00100010/s//"/gg/00100011/s//#/gg/00100100/s//$/gg/00100101/s//%/gg/00100110/s//&/gg/00100111/s//'/gg/00101000/s//(/gg/00101001/s//)/gg/00101010/s//*/gg/00101011/s//+/gg/00101100/s//,/gg/00101101/s//-/gg/00101110/s//./gg/00101111/s////gg/00110000/s//0/gg/00110001/s//1/gg/00110010/s//2/gg/00110011/s//3/gg/00110100/s//4/gg/00110101/s//5/gg/00110110/s//6/gg/00110111/s//7/gg/00111000/s//8/gg/00111001/s//9/gg/00111010/s//:/gg/00111011/s//;/gg/00111100/s//</gg/00111101/s//=/gg/00111110/s//>/gg/00111111/s//?/gg/01000000/s//@/gg/01000001/s//A/gg/01000010/s//B/gg/01000011/s//C/gg/01000100/s//D/gg/01000101/s//E/gg/01000110/s//F/gg/01000111/s//G/gg/01001000/s//H/gg/01001001/s//I/gg/01001010/s//J/gg/01001011/s//K/gg/01001100/s//L/gg/01001101/s//M/gg/01001110/s//N/gg/01001111/s//O/gg/01010000/s//P/gg/01010001/s//Q/gg/01010010/s//R/gg/01010011/s//S/gg/01010100/s//T/gg/01010101/s//U/gg/01010110/s//V/gg/01010111/s//W/gg/01011000/s//X/gg/01011001/s//Y/gg/01011010/s//Z/gg/01011011/s//[/gg/01011100/s//\/gg/01011101/s//]/gg/01011110/s//^/gg/01011111/s//_/gg/01100000/s//`/gg/01100001/s//a/gg/01100010/s//b/gg/01100011/s//c/gg/01100100/s//d/gg/01100101/s//e/gg/01100110/s//f/gg/01100111/s//g/gg/01101000/s//h/gg/01101001/s//i/gg/01101010/s//j/gg/01101011/s//k/gg/01101100/s//l/gg/01101101/s//m/gg/01101110/s//n/gg/01101111/s//o/gg/01110000/s//p/gg/01110001/s//q/gg/01110010/s//r/gg/01110011/s//s/gg/01110100/s//t/gg/01110101/s//u/gg/01110110/s//v/gg/01110111/s//w/gg/01111000/s//x/gg/01111001/s//y/gg/01111010/s//z/gg/01111011/s//{/gg/01111100/s//|/gg/01111101/s//}/gg/01111110/s//~/gg/[ ][ ](.)[ ][ ]/s//\1/g,pQ
Output:
$ cat base64-decode.ed | ed -E base64-decode.input117VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

F#

Standard Library

openSystemopenSystem.IOletencoded="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"letdecoded=Convert.FromBase64StringencodedFile.WriteAllBytes("favicon.ico",decoded)
Output:

Rosetta Code Icon

Manual Implementation

openSystemopenSystem.IOletencoded="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"letdecode(s:string)=letchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".ToCharArray()letfiltered=String.filter(func->Array.containscchars||c='=')sletpaddingSize=filtered|>String.filter((=)'=')|>String.lengthlets=filtered.Replace('=','A').ToCharArray()|>Array.mapintletints=chars|>Array.mapintletcalcc=letn=[c..(c+3)]|>List.sumBy(funk->Array.IndexOf(ints,s.[k])<<<(18-6*(k%4)))[16;8;0]|>List.map(funk->(n>>>k)&&&255|>char|>string)|>List.reduce(+)[0..4..Array.lengths-1]|>List.mapcalc|>List.reduce(+)|>funr->r.Substring(0,String.lengthr-paddingSize).ToCharArray()|>Array.mapbyteletdecoded=decodeencodedFile.WriteAllBytes("favicon.ico",decoded)
Output:

Rosetta Code Icon

Factor

USING:base64iostrings;"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"base64>>stringprint
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich



Forth

Works with:gforth version 0.7.3

Inspired from Wikipedia. Use of a buffer.May be also of interest : github.com/lietho/base64-forth

variablebitsbuff:char>6bits( c -- u )dup43=ifdrop62exitthen( + case )dup47=ifdrop63exitthen( / case )dup4858withinif48-52+exitthen( 0-9 case )dup6591withinif65-exitthen( A-Z case )dup97123withinif97-26+exitthen( a-z case )drop0( padding );:6bitsin( v -- )bitsbuff@6lshift+bitsbuff!;:4charsin( addr -- addr+4 )$0bitsbuff!dup4+duprotdoIc@char>6bits6bitsinloop;:3bytes,( -- )bitsbuff@16rshift$ffandc,bitsbuff@8rshift$ffandc,bitsbuff@$ffandc,;:b64dec( addr1 n1 -- addr2 n2 )hererotrot( addr2 addr1 n1 )4/( addr2 addr1 n1/4 )0do4charsin3bytes,loop( addr2 addr1+4x )( get back for padding )1-dupc@61=if1else0thenswap( addr2 0|1 addr1+4x-1 )1-c@61=if1else0then+( addr2 0|1|2 )swap( 0|1|2 addr2 )duphereswap-( 0|1|2 addr2 n' )rot-( addr2 n2 );
Output:
s" VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo" b64dec cr type cr To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich ok( encode with b64enc as coded for Base64 encode data task )s" VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo" b64dec b64enc cr type VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo oks" YW55IGNhcm5hbCBwbGVhc3VyZS4=" b64dec cr type crany carnal pleasure. oks" YW55IGNhcm5hbCBwbGVhc3VyZQ==" b64dec cr type cr any carnal pleasure ok


FreeBASIC

DimSharedAsStringB64B64="ABCDEFGHIJKLMNOPQRSTUVWXYZ"&_"abcdefghijklmnopqrstuvwxyz"&_"0123456789+/"FunctionMIMEDecode(sAsString)AsIntegerIfLen(s)ThenMIMEdecode=Instr(B64,s)-1ElseMIMEdecode=-1EndIfEndFunctionFunctionDecode64(sAsString)AsStringDimAsIntegerw1,w2,w3,w4DimAsStringmDFornAsInteger=1ToLen(s)Step4w1=MIMEdecode(Mid(s,n+0,1))w2=MIMEdecode(Mid(s,n+1,1))w3=MIMEdecode(Mid(s,n+2,1))w4=MIMEdecode(Mid(s,n+3,1))Ifw2>-1ThenmD+=Chr(((w1*4+Int(w2/16))And255))Ifw3>-1ThenmD+=Chr(((w2*16+Int(w3/4))And255))Ifw4>-1ThenmD+=Chr(((w3*64+w4)And255))NextnReturnmDEndFunctionDimAsStringmsg64="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVw"&_"IHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="Printmsg64Print:Print(Decode64(msg64))Sleep
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Frink

This reproduces the Rosetta Code icon as specified in theBase64 encode data task.

s="""iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAWJQTFRFAAAA/8IA/8EA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8UA/8UA/8QA/8IA/8IA/8IA/8IA/8IA/8IA/8MAdWVhiHJUiHJUc2Rj/8MA/8IA/8IA/8IA/8IA/8IA06QfjXZQjnZQjXVR3qwX/8IA/8IA/8IA/8IA/8IA/8kAjHVRjnZQjnZQjHVR/8gA/8IA/8IA/8IAjHVRjHVR/8gA/8IA/8IA1aYejXZQjnZQjXVR3qwX/8IA/8IA/8IA/8MAdGRjh3FVcmNj/8MA/8IA/8QA/8UA/8UA/8UA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IA/8IAjnZQ////pZF7sgAAAHN0Uk5TAAAAA5iNAjzp5DUSMTAQYPz6WBEEjPCUG8G7GZrvhkfqRTV2MUvy50Jc9FoZRUQWX/vzDau2Gab7nRi6qQwlWyZR9fJIKCMnYVBJK624GqX6nhm8C/VcGEEWYFczdXQvSvGI7O0awBeXLA9f+VY+5jiZkk/hQmMAAAABYktHRHWoapj7AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAA7UlEQVQY0z1P11ICARDbFTvIKZ4HooiA7USxYMHGqRSxY6HYAAULxRr+f1zAMU+ZzCabEAnY1A50dDL9oY27uoGeXm4qbLb0WZV+YMA2KIxJHdI0u2MYcI6Maq4xE7nHAZfH6/NNTE4B0zOkz8q1f24+sLC4BCzbKLgCrK6th0Ibm1vA9g5x2DB29/br9Ug0phtxJj5QErHDhnB0nFDCTMET4PTsPJm8uLwSyzXpKQlNZ7LZm9tG6B15pKTmvn/I5QuPzbfqU7Fkf34R3+tbqSjF2FouV6pSvfZeEcatcR9S9/OL/+ey+g38tOb/AjOBNqW00PrwAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA4LTAyVDIwOjM5OjEwKzAwOjAw98IZEQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wOC0wMlQyMDozOToxMCswMDowMIafoa0AAABGdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuNy44LTkgMjAxNC0wNS0xMiBRMTYgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmfchu0AAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OmhlaWdodAAxOTIPAHKFAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADE5MtOsIQgAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTQzODU0Nzk1MNul3mEAAAAPdEVYdFRodW1iOjpTaXplADBCQpSiPuwAAABWdEVYdFRodW1iOjpVUkkAZmlsZTovLy9tbnRsb2cvZmF2aWNvbnMvMjAxNS0wOC0wMi8xNDBkYmM4M2RmNWY3NmQyNmIzYWNlM2ZlYTViYzI5ZS5pY28ucG5nBect2gAAAABJRU5ErkJggg=="""f = newJava["java.io.FileOutputStream", ["favicon.ico"]]f.write[base64DecodeToBytes[s]]f.close[]

FutureBasic

include "NSlog.incl"local fn EncodeStringAsBase64( stringToEncode as CFStringRef ) as CFStringRef  CFStringRef encodedBase64Str = NULL  CFDataRef dataToEncode = fn StringData( stringToEncode, NSUTF8StringEncoding )  encodedBase64Str = fn DataBase64EncodedString( dataToEncode, 0 )end fn = encodedBase64Strlocal fn DecodeBase64String( base64String as CFStringRef ) as CFStringRef  CFStringRef decodedString = NULL  CFDataRef encodedData  = fn DataWithBase64EncodedString( base64String, NSDataBase64DecodingIgnoreUnknownCharacters )  decodedString = fn StringWithData( encodedData, NSUTF8StringEncoding )end fn = decodedStringCFStringRef originalString, encodedBase64String, decodedBase64StringoriginalString = @"This is a test string to be encoded as Base64 and then decoded."NSLog( @"This is the original string:\n\t%@\n", originalString )encodedBase64String = fn EncodeStringAsBase64( originalString )NSLog( @"This is the original string encoded as Base64:\n\t%@\n", encodedBase64String )decodedBase64String = fn DecodeBase64String( encodedBase64String )NSLog( @"This is the Base64 string decoded:\n\t%@", decodedBase64String )HandleEvents
Output:
This is the original string:    This is a test string to be encoded as Base64 and then decoded.This is the original string encoded as Base64:    VGhpcyBpcyBhIHRlc3Qgc3RyaW5nIHRvIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCB0aGVuIGRlY29kZWQuThis is the Base64 string decoded:    This is a test string to be encoded as Base64 and then decoded.

Go

As images can no longer be uploaded to RC, I've encoded and decoded a string rather than the Rosetta Code icon.

packagemainimport("encoding/base64""fmt")funcmain(){msg:="Rosetta Code Base64 decode data task"fmt.Println("Original :",msg)encoded:=base64.StdEncoding.EncodeToString([]byte(msg))fmt.Println("\nEncoded  :",encoded)decoded,err:=base64.StdEncoding.DecodeString(encoded)iferr!=nil{fmt.Println(err)return}fmt.Println("\nDecoded  :",string(decoded))}
Output:
Original : Rosetta Code Base64 decode data taskEncoded  : Um9zZXR0YSBDb2RlIEJhc2U2NCBkZWNvZGUgZGF0YSB0YXNrDecoded  : Rosetta Code Base64 decode data task

Groovy

Translation of:Java
importjava.nio.charset.StandardCharsetsclassDecode{staticvoidmain(String[]args){Stringdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="Base64.Decoderdecoder=Base64.getDecoder()byte[]decoded=decoder.decode(data)StringdecodedStr=newString(decoded,StandardCharsets.UTF_8)System.out.println(decodedStr)}}
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Haskell

Simple implementation that decodes an ASCII string.

--Decodes Base64 to ASCIIimportqualifiedData.Map.StrictasMap(Map,lookup,fromList)importData.Maybe(fromJust,listToMaybe,mapMaybe)importNumeric(readInt,showIntAtBase)importData.Char(chr,digitToInt)importData.List.Split(chunksOf)byteToASCII::String->StringbyteToASCII=mapchr.decoder--generates list of bytes (represented by Int)decoder::String->[Int]decoder=mapreadBin.takeWhile(\x->lengthx==8).chunksOf8.concatMaptoBin.mapMaybe(`Map.lookup`table).filter(/='=')--turns decimal into a list of char that represents a binary numbertoBin::Int->StringtoBinn=leftPad$showIntAtBase2("01"!!)n""--this adds all the zeros to the left that showIntAtBase omittedleftPad::String->StringleftPada=replicate(6-lengtha)'0'++a--turns list of '0' and '1' into list of 0 and 1readBin::String->IntreadBin=fromJust.fmapfst.listToMaybe.readInt2(`elem`"01")digitToInt--lookup list for the sextetstable::Map.MapCharInttable=Map.fromList$zip"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[0..]main::IO()main=putStrLn$byteToASCII"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCi0tIFBhdWwgUi4gRWhybGljaA=="
Output:
To err is human, but to really foul things up you need a computer.-- Paul R. Ehrlich


or in terms of Data.ByteString.Base64:

{-# LANGUAGE OverloadedStrings #-}importqualifiedData.ByteString.Base64asBase64(decode,encode)importqualifiedData.ByteString.Char8asB(putStrLn)main::IO()main=doB.putStrLn$Base64.encode"To err is human, but to really foul things up you need a computer.\n-- Paul R. Ehrlich"B.putStrLn"\n-->\n"eitherprintB.putStrLn$Base64.decode"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCi0tIFBhdWwgUi4gRWhybGljaA=="
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCi0tIFBhdWwgUi4gRWhybGljaA==-->To err is human, but to really foul things up you need a computer.-- Paul R. Ehrlich

Haxe

classMain{staticfunctionmain(){vardata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVw"+"IHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";Sys.println('$data\n');vardecoded=haxe.crypto.Base64.decode(data);Sys.println(decoded);}}
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

J

using J'sconvert/misc/base64 script:

require'convert/misc/base64'frombase64'VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g='Toerrishuman,buttoreallyfoulthingsupyouneedacomputer.--PaulR.Ehrlich

Alternative implementation based on that script:

BASE64=:(a.{~,(a.i.'Aa')+/i.26),'0123456789+/'frombase64=:{{pad=._2>.(yi.'=')-#ypad}.a.{~#._8[\,(6#2)#:BASE64i.y}}

Java

Java offers theBase64 class, which includes both theEncoder andDecoder classes.
The implementation supports RFC 4648 and RFC 2045.

Similar to the encoding process, the usage is very simple, supply abyte array, and it will return an encodedbyte array.

The class uses a static construct, so instead of instantiation via a constructor, you use one of thestatic methods.
In this case we'll use theBase64.getDecoder method to acquire our instance.

importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Base64;
voiddecodeToFile(Stringpath,byte[]bytes)throwsIOException{try(FileOutputStreamstream=newFileOutputStream(path)){byte[]decoded=Base64.getDecoder().decode(bytes);stream.write(decoded,0,decoded.length);}}

The operation is successful, creating a 48 by 48-pixel, 32-bit color graphic, at 15,086 bytes.

An alternate demonstration

Translation of:Kotlin
importjava.nio.charset.StandardCharsets;importjava.util.Base64;publicclassDecode{publicstaticvoidmain(String[]args){Stringdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";Base64.Decoderdecoder=Base64.getDecoder();byte[]decoded=decoder.decode(data);StringdecodedStr=newString(decoded,StandardCharsets.UTF_8);System.out.println(decodedStr);}}
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

JavaScript

Browser

// define base64 data; in this case the data is the string: "Hello, world!"constbase64='SGVsbG8sIHdvcmxkIQ==';// atob is a built-in function.console.log(atob(base64));

Node.js

// define base64 data; in this case the data is the string: "Hello, world!"constbase64=Buffer.from('SGVsbG8sIHdvcmxkIQ==','base64');// <Buffer>.toString() is a built-in method.console.log(base64.toString());
Output:
Hello, world!

jq

Simply pipe the base64 string into:

   jq -rR @base64d

Jsish

SeeBase64_encode_data#Jsish forbase64.jsi.

/* Base64 decode, in Jsish */vardata=exec('jsish base64.jsi',{retAll:true}).data;// or use File.read('stdin');varicon=Util.base64(data,true);File.write('rosetta-favicon.ico',icon);

Julia

Using an IOBuffer here, though not really needed to decode a string, shows how we could pipe a network stream or file though Julia's builtin Base64 decoder.

usingBase64io=IOBuffer()iob64_decode=Base64DecodePipe(io)write(io,"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo")seekstart(io)println(String(read(iob64_decode)))
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Kotlin

Translation of:D
importjava.util.Base64funmain(){valdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="valdecoder=Base64.getDecoder()valdecoded=decoder.decode(data)valdecodedStr=String(decoded,Charsets.UTF_8)println(decodedStr)}
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Lua

-- Start taken from https://stackoverflow.com/a/35303321localb='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'-- You will need this for encoding/decoding-- decodingfunctiondec(data)data=string.gsub(data,'[^'..b..'=]','')return(data:gsub('.',function(x)if(x=='=')thenreturn''endlocalr,f='',(b:find(x)-1)fori=6,1,-1dor=r..(f%2^i-f%2^(i-1)>0and'1'or'0')endreturnr;end):gsub('%d%d%d?%d?%d?%d?%d?%d?',function(x)if(#x~=8)thenreturn''endlocalc=0fori=1,8doc=c+(x:sub(i,i)=='1'and2^(8-i)or0)endreturnstring.char(c)end))end-- end of copylocaldata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"print(data)print()localdecoded=dec(data)print(decoded)
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoTo err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

M2000 Interpreter

Using a file and a Document object

Load.doc handle automatic UTF16LE UTF16BE UTF8 and ANSI. Also automatic find the type of new line (here is LF)

Tempname$ retuen a unique path+filename at temporary folder. The temporary file automatic deleted when the M2000 environment closed.

inp$={VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=}tmp$=tempname$open tmp$ for wide output as #f      print #f, string$(inp$ as decode64);close #fdocument a$load.doc a$, tmp$report a$clipboard a$
Without File

If we know the encoding and type of line feed we can do this:

inp$={VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=}// decode inp$ (is 8-bit ANSI coded using 0xA for paragraph end/new line)a$=string$(inp$ as Decode64)locale 1033// convert ansi to utf16le using Locale 1033a$=chr$(a$)  // convert to utf16LE// expand LF to CRLF for M2000 consolea$=replace$(chr$(0xA), chr$(0XD)+chr$(0XA), a$)// report handle cr and lf  using proportional spacing for text and auto word wrappingreport a$ // also Print channel #-2 handle cr and lf (using non proportional spacing)print #-2, a$
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Mathematica /Wolfram Language

ImportString["VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo","Base64"]
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Nim

importbase64constSource="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="echoSource.decode()
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Nu

'VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g='| decode base64
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

OCaml

We continue from the same toplevel sessionfrom the previous page:

# let plain = Base64.decode_exn enc;;val plain : string =  "\000\000\001\000\002\000\016\016\000\000\000\000\000\000h\005\000\000&\000"... (* string length 3638; truncated *)

Ol

(definebase64-codes"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")(definekernel(alist->ff(mapcons(string->bytesbase64-codes)(iota(string-lengthbase64-codes))))); returns n bits from input binary stream(define(bitsnhold)(letloop((holdhold))(vector-applyhold(lambda(vil)(cond((null?l)(values(>>v(-in))#false))((pair?l)(if(not(less?in))(values(>>v(-in))(vector(bandv(-(<<1(-in))1))(-in)l))(loop(vector(bor(<<v6)(kernel(carl)0))(+i6)(unless(eq?(carl)"=")(cdrl))))))(else(loop(vectorvi(l))))))))); decoder.(define(decodestr)(print"decoding string '"str"':")(letloop((hold[00(str-iterstr)]))(let*((bithold(bits8hold)))(unless(zero?bit)(display(stringbit)))(whenhold(loophold))))(print)(print)); TESTING(decode"SGVsbG8sIExpc3Ah")(decode"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=")(decode"TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=")
Output:
Hello, Lisp!To err is human, but to really foul things up you need a computer.    -- Paul R. EhrlichMan is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

Perl

The MIME::Base64 module is to be preferred, but this works too.

subdecode_base64{my($d)=@_;$d=~tr!A-Za-z0-9+/!!cd;$d=~s/=+$//;$d=~tr!A-Za-z0-9+/!-_!;my$r='';while($d=~ /(.{1,60})/gs){my$len=chr(32+length($1)*3/4);$r.=unpack("u",$len.$1);}$r;}$data=<<EOD;J1R3YXMgYnJpbGxpZywgYW5kIHRoZSBzbGl0aHkgdG92ZXMKRGlkIGd5cmUgYW5kIGdpbWJsZSBpbiB0aGUgd2FiZToKQWxsIG1pbXN5IHdlcmUgdGhlIGJvcm9nb3ZlcywKQW5kIHRoZSBtb21lIHJhdGhzIG91dGdyYWJlLgo=EODprintdecode_base64($data)."\n";
Output:
'Twas brillig, and the slithy tovesDid gyre and gimble in the wabe:All mimsy were the borogoves,And the mome raths outgrabe.

Phix

withjavascript_semanticsincludebuiltins\base64.estrings="Rosetta Code Base64 decode data task"stringe=encode_base64(s)?e?decode_base64(e)
Output:
"Um9zZXR0YSBDb2RlIEJhc2U2NCBkZWNvZGUgZGF0YSB0YXNr""Rosetta Code Base64 decode data task"

PHP

$encoded='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVw'.'IHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=';echo$encoded,PHP_EOL,base64_decode($encoded),PHP_EOL;
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

PicoLisp

(setq *Char64   `'(chop         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ) )(de decode64 (S)   (let S (chop S)      (pack         (make            (while S               (let                  (A (dec (index (++ S) *Char64))                     B (dec (index (++ S) *Char64))                     C (dec (index (++ S) *Char64))                     D (dec (index (++ S) *Char64)) )                  (link                     (char (| (>> -2 A) (>> 4 B))) )                  (and                     C                     (link                        (char                           (| (>> -4 (& B 15)) (>> 2 C)) ) )                     D                     (link                        (char (| (>> -6 (& C 3)) D)) ) ) ) ) ) ) ) )(prinl (decode64 "VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"))
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Pike

By necessity this also implements all of the Base64 encode task toavoid a humongous amount of icon data hardcoded in the program.

stringicon=Protocols.HTTP.get_url_data("http://rosettacode.org/favicon.ico");stringencoded=MIME.encode_base64(icon);Stdio.write_file("favicon.ico",MIME.decode_base64(encoded));

Pluto

The standard library already contains Base 64 encode and decode functions.

localbase64=require("base64")locals="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="print(base64.decode(s))
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

PowerShell

Outputting an ASCII string converted from a Base64-encoded one:

[Text.Encoding]::ASCII.GetString([Convert]::FromBase64String("VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="))
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

With the results fromBase64 encode data#PowerShell (stored in the "bytes" variable):

$bytes=...[IO.File]::WriteAllBytes('favicon.ico',[Convert]::FromBase64String($bytes))

Prolog

In SWI-Prolog base64 is a built in predicate.https://www.swi-prolog.org/pldoc/doc_for?object=base64%3Abase64/2

This predicate is reversable and can encode or decode.

Output:
?- Encoded = 'VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=', base64(Plain, Encoded).Plain = 'To err is human, but to really foul things up you need a computer.\n    -- Paul R. Ehrlich'.

PureBasic

b64cd$="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVw"+"IHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="*p_buf=AllocateMemory(1024)Base64Decoder(b64cd$,*p_buf,1024)OpenConsole(""):PrintN(PeekS(*p_buf,-1,#PB_UTF8))Input()
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Python

importbase64data='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g='print(base64.b64decode(data).decode('utf-8'))
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

QB64

Option_ExplicitDimAsStringudata,decodedudata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"decoded=decode(udata)PrintudataPrintdecodedFunctionfindIndex&(valueAs_Unsigned_Byte)IfAsc("A")<=valueAndvalue<=Asc("Z")ThenfindIndex=value-Asc("A")ExitFunctionEndIfIfAsc("a")<=valueAndvalue<=Asc("z")ThenfindIndex=value-Asc("a")+26ExitFunctionEndIfIfAsc("0")<=valueAndvalue<=Asc("9")ThenfindIndex=value-Asc("0")+52ExitFunctionEndIfIfvalue=Asc("+")ThenfindIndex=62ExitFunctionEndIfIfvalue=Asc("/")ThenfindIndex=63ExitFunctionEndIffindIndex=-1EndFunctionFunctionencode$(sourceAsString)DimAsStringBase64:Base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"DimAs_Unsigned_Integer64length:length=Len(source)DimAs_Unsigned_Integer64it,strendDimAsLongaccDimAsStringsinkstrend=lengthWhileit<>strendDimAs_Unsigned_Byteb1,b2,b3,b4it=it+1b1=Asc(Mid$(source,it,1))sink=sink+Mid$(Base64,_SHR(b1,2),1)acc=_SHL(b1And&H3,4)Ifit<>strendThenit=it+1b2=Asc(Mid$(source,it,1))acc=accOr_SHR(b2,4)sink=sink+Mid$(Base64,acc,1)acc=_SHL(b2And&HF,2)Ifit<>strendThenit=it+1b3=Asc(Mid$(source,it,1))acc=accOr_SHR(b3,6)sink=sink+Mid$(Base64,acc,1)sink=sink+Mid$(Base64,b3And&H3F,1)Elsesink=sink+Mid$(Base64,acc,1)sink=sink+"="EndIfElsesink=sink+Mid$(Base64,acc,1)sink=sink+"="sink=sink+"="EndIfWendencode=sinkEndFunctionFunctiondecode$(sourceAsString)DimAs_Unsigned_Integer64length:length=Len(source)DimAs_Unsigned_Integer64it,strendDimAsLongaccDimAsStringsinkstrend=lengthWhileit<>strendDimAs_Unsigned_Byteb1,b2,b3,b4it=it+1b1=Asc(Mid$(source,it,1))it=it+1b2=Asc(Mid$(source,it,1))it=it+1b3=Asc(Mid$(source,it,1))it=it+1b4=Asc(Mid$(source,it,1))DimAsLongi1,i2i1=findIndex(b1)i2=findIndex(b2)acc=_SHL(i1,2)acc=accOr_SHR(i2,4)sink=sink+Chr$(acc)Ifb3<>Asc("=")ThenDimAsLongi3i3=findIndex(b3)acc=_SHL(i2And&HF,4)acc=accOr_SHR(i3,2)sink=sink+Chr$(acc)Ifb4<>Asc("=")ThenDimAsLongi4i4=findIndex(b4)acc=_SHL(i3And&H3,6)acc=accOri4sink=sink+Chr$(acc)EndIfEndIfWenddecode=sinkEndFunction
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoTo err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

R

Using base64enc

Works with:R version 4.1.0
Library:base64enc
"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"|>base64enc::base64decode()|>rawToChar()|>cat()
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Racket

#langracket(requirenet/urlnet/base64);; decode a string(displayln(base64-decode#"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="));; (encode and) decode the favicon(displayln(base64-decode(base64-encode(call/input-url(string->url"https://rosettacode.org/favicon.ico")get-pure-portport->bytes))))
Output:

(string output only)

To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Raku

(formerly Perl 6)

Works with:Rakudo version 2018.11
my$e64 ='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=';my@base64map =flat'A' ..'Z','a' ..'z', ^10,'+','/';my%base64isdefault(0) =@base64map.pairs.invert;subbase64-decode-slow ($enc) {my$buf =Buf.new;for$enc.subst(/\s/,'', :g).comb(4) ->$chunck {$buf.append: |(sprintf"%06d%06d%06d%06d", |$chunck.comb.map:            {%base64{$_}.base(2)}).comb(8).map: {:2($_)};    }$buf}say'Slow:';saybase64-decode-slow($e64).decode('utf8');# Of course, the above routine is slow and is only for demonstration purposes.# For real code you should use a module, which is MUCH faster and heavily tested.say"\nFast:";useBase64::Native;saybase64-decode($e64).decode('utf8');
Output:
Slow:To err is human, but to really foul things up you need a computer.    -- Paul R. EhrlichFast:To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Rebol

printtostring!debase{VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo}64


Red

Red[Source:https://github.com/vazub/rosetta-red]printto-stringdebase"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo"
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

REXX

Version 1

Decode the string created by BASE64 encode (which is a draft task).
More work needed for decoding large input data!

z='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'doi=1to64bs.i=x2b(d2x(i-1))c=substr(z,i,1)ds.c=right(bs.i,6,0)Ende='YW55IGNhcm5hbCBwbGVhc3VyZS4'r=''ec=eDoWhileec<>''ParseVarecc+1ecr=r||ds.cEndres=''Dowhiler<>''ParseVarrx+8rres=res||x2c(b2x(x))EndSay'Input:   >'e'<'Say'decoded: >'res'<'
Output:
Input:   >YW55IGNhcm5hbCBwbGVhc3VyZS4<decoded: >any carnal pleasure.<

Version 2

IncludeHow to use
IncludeSource code
The program uses a simple and straightforward string based method. Sufficient for the task, but inadequate for serious work.
Task 1 shows the Wikipedia examples. Task 2 recreates the Rosetta Code icon from the output of taskBase64 encode data.
The input favicon.dat is converted to favcopy.ico and compared (Windows) to favicon.ico.

--3Oct2025includeSettingsignaloffnotreadysay'BASE64 DECODE DATA'sayversionsaycallTask1'TWFueSBoYW5kcyBtYWtlIGxpZ2h0IHdvcmsu'callTask1'TWFu'callTask1'TWE='callTask1'TQ=='callTask1'YW55IGNhcm5hbCBwbGVhc3VyZS4='callTask2exitTask1:procedureparseargxxsay'Encoded 'xxsay'Original'Decode64(xx)sayreturnTask2:procedurein='favicon.dat';out='favcopy.ico'rr=Decode64(Charin(in,1,30000))callCharoutout,rr,1returnDecode64:procedureparseargxx--Alphabeta='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'lx=Length(xx)rr=''--Loopthruencodedcharactersdoi=1tolxc=Substr(xx,i,1)--Ifpadding,discard2bitsifc='='thendorr=Left(rr,Length(rr)-2)iterateiend--Findpositioninalphabetp=Pos(c,a)-1--Converttobitsandtakelast6b=Right(0000||X2b(D2x(p)),6)--Appendrr||=bend--ConverttocharacterreturnX2c(B2x(rr))includeAbend
Output:
BASE64 DECODE DATAREXX-Regina_3.9.7(MT) 5.00 18 Mar 2025Encoded  TWFueSBoYW5kcyBtYWtlIGxpZ2h0IHdvcmsuOriginal Many hands make light work.Encoded  TWFuOriginal ManEncoded  TWE=Original MaEncoded  TQ==Original MEncoded  YW55IGNhcm5hbCBwbGVhc3VyZS4=Original any carnal pleasure.C:\Rex\Rosetta\B>comp favicon.ico favcopy.icoComparing favicon.ico and favcopy.ico...Files compare OK

Ring

#======================================##  Sample: Base64 decode data #  Author: Gal Zsolt, Mansour Ayouni#======================================#load "guilib.ring"oQByteArray = new QByteArray()oQByteArray.append("Rosetta Code Base64 decode data task")oba = oQByteArray.toBase64().data()see oba + nloQByteArray = new QByteArray()oQByteArray.append(oba)see oQByteArray.fromBase64(oQByteArray).data()
Output:
Um9zZXR0YSBDb2RlIEJhc2U2NCBkZWNvZGUgZGF0YSB0YXNrRosetta Code Base64 decode data task

RPL

Works with:RPL version HP-49C
« "" DUP DUP2 → s a b c d  « ""     1 s SIZEFOR j        0 3FOR k                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"           s j k + DUP SUB POSNEXT        4 →LIST 1 - { a b c d } STO        a 4 * b 16 / IP + CHR +IF c -1 ≠THEN b 16 MOD 16 * c 4 / IP + CHR +ENDIF d -1 ≠THEN c 4 MOD 64 * d + CHR +END    4STEP » » 'B64→' STO
"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="B64→
Output:
 1: "To err is human, but to really foul things up you need a computer.   -- Paul R. Ehrlich"

Ruby

require'base64'raku_example='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g='putsBase64.decode64raku_example
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Rust

usestd::str;constINPUT:&str="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo";constUPPERCASE_OFFSET:i8=-65;constLOWERCASE_OFFSET:i8=26-97;constNUM_OFFSET:i8=52-48;fnmain(){println!("Input: {}",INPUT);letresult=INPUT.chars().filter(|&ch|ch!='=')//Filter '=' chars.map(|ch|{//Map char values using Base64 Characters Tableletascii=chasi8;letconvert=matchch{'0'...'9'=>ascii+NUM_OFFSET,'a'...'z'=>ascii+LOWERCASE_OFFSET,'A'...'Z'=>ascii+UPPERCASE_OFFSET,'+'=>62,'/'=>63,_=>panic!("Not a valid base64 encoded string")};format!("{:#08b}",convert)[2..].to_string()//convert indices to binary format and remove the two first digits}).collect::<String>()//concatenate the resulting binary values.chars().collect::<Vec<char>>().chunks(8)//split into 8 character chunks.map(|chunk|{letnum_str=chunk.iter().collect::<String>();usize::from_str_radix(&num_str,2).unwrap()asu8//convert the binary string into its u8 value}).collect::<Vec<_>>();letresult=str::from_utf8(&result).unwrap();//convert into UTF-8 stringprintln!("Output: {}",result);}
Output:
Input: VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoOutput: To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

Scala

Output:

Best seen in running your browser either byScalaFiddle (ES aka JavaScript, non JVM) orScastie (remote JVM).

importjava.util.Base64objectBase64DecodeextendsApp{deftext2BinaryDecoding(encoded:String):String={valdecoded=Base64.getDecoder.decode(encoded)newString(decoded,"UTF-8")}defdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="println(text2BinaryDecoding(data))}

Seed7

The Seed7 libraryencoding.s7i definesthe functionstoBase64 andfromBase64.

$ include "seed7_05.s7i";  include "gethttp.s7i";  include "encoding.s7i";const proc: main is func  local    var string: original is "";    var string: encoded is "";  begin    original := getHttp("rosettacode.org/favicon.ico");    encoded := toBase64(original);    writeln("Is the Rosetta Code icon the same (byte for byte) encoded then decoded: " <&            fromBase64(encoded) = original);  end func;
Output:
Is the Rosetta Code icon the same (byte for byte) encoded then decoded: TRUE

SenseTalk

put base64Decode ("VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuIC0tUGF1bCBSLkVocmxpY2g=")

Output:

To err is human, but to really foul things up you need a computer. --Paul R.Ehrlich

Sidef

vardata=<<'EOT'VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=EOTsaydata.decode_base64
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Smalltalk

Works with:Smalltalk/X
data:='VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g='.database64DecodedasStringprintCR.
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Standard ML

valdebase64=fninput=>letinfix2Worbinfix2Wandbfun(pWorbq)=Word.orb(p,q);fun(pWandbq)=Word.andb(p,q);fundecode#"/"=0wx3F|decode#"+"=0wx3E|decodec=ifChar.isDigitcthenWord.fromInt(ordc)+0wx04elseifChar.isLowercthenWord.fromInt(ordc)-0wx047elseifChar.isUppercthenWord.fromInt(ordc)-0wx041else0wx00;funconvert(a::b::c::d::_)=letvalw=Word.<<(a,0wx12)WorbWord.<<(b,0wx0c)WorbWord.<<(c,0wx06)Worbdin[Word.>>(w,0wx10),Word.>>((wWandb0wx00ff00),0wx08),wWandb0wx0000ff]end|convert_=[];fundecodeLst[]=[]|decodeLstilist=(convertomapdecode)(List.take(ilist,4))@decodeLst(List.drop(ilist,4))inString.implode(List.map(chroWord.toInt)(decodeLst(String.explodeinput)))endhandleSubscript=>"Invalid code\n";

call

val input = "VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=";print (debase64 input) ;To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Swift

importFoundationletinput="""VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="""ifletdecoded=Data(base64Encoded:input),letstr=String(data:decoded,encoding:.utf8){print(str)}
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Tcl

packagerequiretcl8.6setdataVG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=puts[binarydecodebase64$data]
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Visual Basic .NET

Translation of:D
ModuleModule1SubMain()Dimdata="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="Console.WriteLine(data)Console.WriteLine()Dimdecoded=Text.Encoding.ASCII.GetString(Convert.FromBase64String(data))Console.WriteLine(decoded)EndSubEndModule
Output:
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

V (Vlang)

import encoding.base64fn main() {    msg := "Rosetta Code Base64 decode data task"    println("Original : $msg")    encoded := base64.encode_str(msg)    println("\nEncoded  : $encoded")    decoded := base64.decode_str(encoded)    println("\nDecoded  : $decoded")}
Output:
Original : Rosetta Code Base64 decode data taskEncoded  : Um9zZXR0YSBDb2RlIEJhc2U2NCBkZWNvZGUgZGF0YSB0YXNrDecoded  : Rosetta Code Base64 decode data task

Wren

Library:Wren-fmt
Library:Wren-str

From first principles using string manipulation. Quick enough here.

import"io"forStdoutimport"./fmt"forConv,Fmtimport"./str"forStrvaralpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"vardecode=Fn.new{|s|if(s=="")returnsvard=""for(bins){varix=alpha.indexOf(b)if(ix>=0)d=d+Fmt.swrite("$06b",ix)}if(s.endsWith("==")){d=d[0..-5]}elseif(s.endsWith("=")){d=d[0..-3]}vari=0while(i<d.count){varch=String.fromByte(Conv.atoi(d[i..i+7],2))System.write(ch)i=i+8}Stdout.flush()}vars="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="for(chunkinStr.chunks(s,4))decode.call(chunk)System.print()
Output:
To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

XPL0

func Decode(Ch);int  Ch;[if Ch>=^A & Ch<=^Z then return Ch - ^A; if Ch>=^a & Ch<=^z then return Ch - ^a + 26; if Ch>=^0 & Ch<=^9 then return Ch - ^0 + 52; if Ch = ^+ then return 62; if Ch = ^/ then return 63;return -1;];char Str;int  Count, N, Ch, Code, Acc;[Str:= "VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEg Y29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo ";loop    [Count:= 0;        for N:= 1 to 4 do                       \read in four 6-bit chars                [repeat Ch:= Str(0);            \strip out whitespace                        Str:= Str+1;                        if Ch = $A0 then quit;  \terminating space                until   Ch > $20;                Code:= Decode(Ch);                Acc:= Acc<<6;                if Code >= 0 then               \don't count possible "="                        [Acc:= Acc + Code;                        Count:= Count+1;                        ];                ];        ChOut(0, Acc>>16);                      \write out three 8-bit chars        if Count >= 3 then ChOut(0, Acc>>8);        if Count >= 4 then ChOut(0, Acc);        ];]
Output:
To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

YAMLScript

!YS-v0defn main(str):say:base64-decode(str)
Output:
$ ys base64-decode-data.ys VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=To err is human, but to really foul things up you need a computer.    -- Paul R. Ehrlich

Zig

Works with:Zig version 0.14.1
Translation of:Rust
conststd=@import("std");constprint=std.debug.print;constArrayList=std.ArrayList;constAllocator=std.mem.Allocator;constINPUT="VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo";constUPPERCASE_OFFSET:i8=-65;constLOWERCASE_OFFSET:i8=26-97;constNUM_OFFSET:i8=52-48;pubfnmain()!void{vargpa=std.heap.GeneralPurposeAllocator(.{}){};defer_=gpa.deinit();constallocator=gpa.allocator();print("Input: {s}\n",.{INPUT});// Create a dynamic array to collect binary stringsvarbinary_strings=ArrayList([]constu8).init(allocator);defer{for(binary_strings.items)|item|{allocator.free(item);}binary_strings.deinit();}// Process each character and convert to binaryfor(INPUT)|ch|{if(ch=='=')continue;// Filter '=' chars// Map char values using Base64 Characters Tableconstascii:i8=@intCast(ch);constconvert:u8=switch(ch){'0'...'9'=>@intCast(ascii+NUM_OFFSET),'a'...'z'=>@intCast(ascii+LOWERCASE_OFFSET),'A'...'Z'=>@intCast(ascii+UPPERCASE_OFFSET),'+'=>62,'/'=>63,else=>{print("Not a valid base64 encoded string\n",.{});return;},};// Convert to binary format (6 bits for base64)constbinary_str=trystd.fmt.allocPrint(allocator,"{b:0>6}",.{convert});trybinary_strings.append(binary_str);}// Concatenate all binary stringsvartotal_len:usize=0;for(binary_strings.items)|item|{total_len+=item.len;}constconcatenated=tryallocator.alloc(u8,total_len);deferallocator.free(concatenated);varpos:usize=0;for(binary_strings.items)|item|{@memcpy(concatenated[pos..pos+item.len],item);pos+=item.len;}// Split into 8-character chunks and convert to bytesvarresult_bytes=ArrayList(u8).init(allocator);deferresult_bytes.deinit();vari:usize=0;while(i+8<=concatenated.len):(i+=8){constchunk=concatenated[i..i+8];constbyte_value=std.fmt.parseInt(u8,chunk,2)catch|err|{print("Error parsing binary: {}\n",.{err});return;};tryresult_bytes.append(byte_value);}// Convert to UTF-8 string and printconstresult_str=result_bytes.items;if(std.unicode.utf8ValidateSlice(result_str)){print("Output: {s}\n",.{result_str});}else{print("Invalid UTF-8 sequence\n",.{});}}
Output:
Input: VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNoOutput: To err is human, but to really foul things up you need a computer.    --Paul R.Ehrlich

zkl

Using shared libraries for cURL and message hashing:

var [const] MsgHash=Import("zklMsgHash"), Curl=Import("zklCurl"); icon:=Curl().get("http://rosettacode.org/favicon.ico"); //-->(Data(4,331),693,0)icon=icon[0][icon[1],*];    // remove headericonEncoded:=MsgHash.base64encode(icon);iconDecoded:=MsgHash.base64decode(iconEncoded);File("rosettaCodeIcon.ico","wb").write(iconDecoded); # eyeball checking says goodprintln("Is the Rosetta Code icon the same (byte for byte) encoded then decoded: ",   icon==iconDecoded);
Output:
Is the Rosetta Code icon the same (byte for byte) encoded then decoded: True
Text based test:
msg,b64 := "Rosetta Code Base64 decode data task", MsgHash.base64encode(msg);println("Original: %s\nEncoded:  %s\nBytes:    %s\nDecoded:  %s"   .fmt(msg, b64.text, b64.bytes().apply("toString",16).concat(","),        MsgHash.base64decode(b64).text));
Original: Rosetta Code Base64 decode data taskEncoded:  Um9zZXR0YSBDb2RlIEJhc2U2NCBkZWNvZGUgZGF0YSB0YXNrBytes:    55,6d,39,7a,5a,58,52,30,59,53,42,44,62,32,52,6c,49,45,4a,68,63,32,55,32,4e,43,42,6b,5a,57,4e,76,5a,47,55,67,5a,47,46,30,59,53,42,30,59,58,4e,72,aDecoded:  Rosetta Code Base64 decode data task
Retrieved from "https://rosettacode.org/wiki/Base64_decode_data?oldid=390500"
Categories:
Hidden category:
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

[8]ページ先頭

©2009-2026 Movatter.jp