-----BEGIN demo block----- info: blabla SGFsbG8gV2VsdA== -----END demo block-----Das Interface:
Eigenschaften | Beschreibung |
Title | Blocktitel, der beim letzten Dekodieren gelesen wurde. |
Remark | Kommentar, der beim letzten Dekodieren gelesen wurde. Bei mehrzeiligem Kommentar werden die Zeilen TAB-getrennt. |
Methoden | |
Columns() | Base64-Zeilenlänge (Default: 76). Parameter:
|
SetData() | Definition der Base64- bzw. Originaldaten. Parameter:
|
Encode() | Konvertiert die Originaldaten und liefert sie als String im Base64-Format. |
Decode() | Konvertiert die Base64-Daten in ihr Originalformat und liefert sie als String. Versorgt die Eigenschaften Title und Remark. |
Base64 = function() { var self=this,cons=this.constructor; var Data='',Len=0,Ptr=0,Cols=76; function init() { for (var i=0;i<64;i++) cons.AlphR[cons.Alph[i]]=i; } function read() { if (Ptr>=Len) return -1; return Data.charCodeAt(Ptr++)&0xff; } function readR() { while (true) { if (Ptr>=Len) return -1; var c=Data.charAt(Ptr++); if (cons.AlphR[c]) return cons.AlphR[c]; if (c=='A') return 0; if (c>' ') return -1; } } function getLi() { var i=Data.indexOf('\n',Ptr),p=Ptr; if (i>-1) { Ptr=i+1; return Data.slice(p,i); } Ptr=Len; return Data.slice(p); } function unwrap() { var s,pd0=0,b=1; self.Title=self.Remark=''; while (b) { if ((s=getLi()).length) { if (b!=1) continue; if (s.charCodeAt(0)!=45) { Ptr=0; return; } if (s.substring(0,10)!='-----BEGIN') { Len=0; return; } self.Title=s.substr(11,s.length-16); pd0=Ptr; b=2; } else { if (b==1) { pd0=Ptr; continue; } if (Ptr>=Len) break; self.Remark=Data.slice(pd0,Ptr-1).replace(/\n/,'\t'); return; } if (Ptr>=Len) b=0; } Ptr=pd0; } function ntos(n) { n=n.toString(16); if (n.length==1) n='0'+n; return unescape('%'+n); } init(); this.Columns = function(c) { if (c) Cols=Math.min(Math.max(c&=0xfc,64),76); return Cols; } this.Title=''; this.Remark=''; this.SetData = function(dat,tit,rem) { Len=(Data=dat).length,Ptr=0; this.Title=tit||''; this.Remark=rem||''; } this.Encode = function() { var res='',buf=new Array(3),ncol=0,done=false; if (this.Title) { res='-----BEGIN '+this.Title+'-----\n'; if (this.Remark) res+=this.Remark+'\n\n'; } if (!Len) return res; while (!done&&(buf[0]=read())!=-1) { buf[1]=read(); buf[2]=read(); res+=(cons.Alph[buf[0]>>2]); if (buf[1]!=-1) { res+=(cons.Alph[((buf[0]<<4)&0x30)|(buf[1]>>4)]); if (buf[2]!=-1) { res+=(cons.Alph[((buf[1]<<2)&0x3c)|(buf[2]>>6)]); res+=(cons.Alph[buf[2]&0x3F]); } else { res+=(cons.Alph[((buf[1]<<2)&0x3c)]); res+='='; done=true; } } else { res+=(cons.Alph[((buf[0]<<4)&0x30)]); res+='=='; done=true; } if ((ncol+=4)>=Cols&&Ptr<Len) { res+='\n'; ncol=0; } } if (this.Title) res+='\n-----END '+this.Title+'-----\n'; return res; } this.Decode = function() { if (!Len) return ''; unwrap(); var res='',buf=new Array(4),done=false; while (!done&&(buf[0]=readR())!=-1&&(buf[1]=readR())!=-1) { buf[2]=readR(); buf[3]=readR(); res+=ntos((((buf[0]<<2)&0xff)|buf[1]>>4)); if (buf[2]!=-1) { res+=ntos((((buf[1]<<4)&0xff)|buf[2]>>2)); if (buf[3]!=-1) res+=ntos((((buf[2]<<6)&0xff)|buf[3])); else done=true; } else done=true; } return res; } } Base64.Alph=[ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/']; Base64.AlphR=[];
template |