atob und btoa selbst gemacht

Quelle: www.a-coding-project.de 21.11.2022

var base64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcd'+  
              'efghijklmnopqrstuvwxyz0123456789+/';  
  
function encode(decStr)  
{  
 var bits;  
 var dual;  
 var i = 0;  
 var encOut = '';  
 while(decStr.length >= i + 3)  
 {  
 bits = (decStr.charCodeAt(i++) & 0xff) <<16 |  
 (decStr.charCodeAt(i++) & 0xff) <<8 |  
 decStr.charCodeAt(i++) & 0xff;  
 encOut += base64s.charAt((bits & 0x00fc0000) >>18) +  
 base64s.charAt((bits & 0x0003f000) >>12) +  
 base64s.charAt((bits & 0x00000fc0) >> 6) +  
 base64s.charAt((bits & 0x0000003f));  
 }  
 if(decStr.length -i > 0 && decStr.length -i < 3)  
 {  
 dual = Boolean(decStr.length -i -1);  
 bits = ((decStr.charCodeAt(i++) & 0xff) <<16) |  
 (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);  
 encOut += base64s.charAt((bits & 0x00fc0000) >>18) +  
 base64s.charAt((bits & 0x0003f000) >>12) +  
 (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +  
 '=';  
}  
return(encOut);  
}
 
function decode(encStr)  
{  
 var bits;  
 var decOut = '';  
 var i = 0;  
 for(; i<encStr.length; i += 4)  
 {  
 bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 |  
 (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 |  
 (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |  
 base64s.indexOf(encStr.charAt(i +3)) & 0xff;  
 decOut += String.fromCharCode((bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);  
 }  
 if(encStr.charCodeAt(i -2) == 61)  
 {  
 return(decOut.substring(0, decOut.length -2));  
 }  
 else if(encStr.charCodeAt(i -1) == 61)  
 {  
 return(decOut.substring(0, decOut.length -1));  
 }  
 else {return(decOut)};  
}