关于加密解密 Base64 and URL and Hex Encoding and Decoding(base32在线加密)学到了

随心笔谈11个月前发布 admin
79 0

Base64 and URL and Hex Encoding and Decoding 

function urlDecode(str){ 

 str=str.replace(new RegExp(‘\\+’,’g’),’ ‘); 

 return unescape(str); 

function urlEncode(str){ 

 str=escape(str); 

 str=str.replace(new RegExp(‘\\+’,’g’),’%2B’); 

 return str.replace(new RegExp(‘%20′,’g’),’+’); 

var END_OF_INPUT = -1; 

var base64Chars = new Array( 

 ‘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′,’+’,’/’ 

); 

var reverseBase64Chars = new Array(); 

for (var i=0; i < base64Chars.length; i++){ 

 reverseBase64Chars[base64Chars[i]] = i; 

var base64Str; 

var base64Count; 

function setBase64Str(str){ 

 base64Str = str; 

 base64Count = 0; 

function readBase64(){  

 if (!base64Str) return END_OF_INPUT; 

 if (base64Count >= base64Str.length) return END_OF_INPUT; 

 var c = base64Str.charCodeAt(base64Count) & 0xff; 

 base64Count++; 

 return c; 

function encodeBase64(str){ 

 setBase64Str(str); 

 var result = ”; 

 var inBuffer = new Array(3); 

 var lineCount = 0; 

 var done = false; 

 while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){ 

 inBuffer[1] = readBase64(); 

 inBuffer[2] = readBase64(); 

 result += (base64Chars[ inBuffer[0] >> 2 ]); 

 if (inBuffer[1] != END_OF_INPUT){ 

 result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]); 

 if (inBuffer[2] != END_OF_INPUT){ 

 result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]); 

 result += (base64Chars [inBuffer[2] & 0x3F]); 

 } else { 

 result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]); 

 result += (‘=’); 

 done = true; 

 } 

 } else { 

 result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]); 

 result += (‘=’); 

 result += (‘=’); 

 done = true; 

 } 

 lineCount += 4; 

 if (lineCount >= 76){ 

 result += (‘\n’); 

 lineCount = 0; 

 } 

 } 

 return result; 

function readReverseBase64(){  

 if (!base64Str) return END_OF_INPUT; 

 while (true){  

 if (base64Count >= base64Str.length) return END_OF_INPUT; 

 var nextCharacter = base64Str.charAt(base64Count); 

 base64Count++; 

 if (reverseBase64Chars[nextCharacter]){ 

 return reverseBase64Chars[nextCharacter]; 

 } 

 if (nextCharacter == ‘A’) return 0; 

 } 

 return END_OF_INPUT; 

function ntos(n){ 

 n=n.toString(16); 

 if (n.length == 1) n=”0″+n; 

 n=”%”+n; 

 return unescape(n); 

function decodeBase64(str){ 

 setBase64Str(str); 

 var result = “”; 

 var inBuffer = new Array(4); 

 var done = false; 

 while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT 

 && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){ 

 inBuffer[2] = readReverseBase64(); 

 inBuffer[3] = readReverseBase64(); 

 result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4)); 

 if (inBuffer[2] != END_OF_INPUT){ 

 result += ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2)); 

 if (inBuffer[3] != END_OF_INPUT){ 

 result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3])); 

 } else { 

 done = true; 

 } 

 } else { 

 done = true; 

 } 

 } 

 return result; 

var digitArray = new Array(‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a’,’b’,’c’,’d’,’e’,’f’); 

function toHex(n){ 

 var result = ” 

 var start = true; 

 for (var i=32; i>0;){ 

 i-=4; 

 var digit = (n>>i) & 0xf; 

 if (!start || digit != 0){ 

 start = false; 

 result += digitArray[digit]; 

 } 

 } 

 return (result==”?’0′:result); 

function pad(str, len, pad){ 

 var result = str; 

 for (var i=str.length; i

 result = pad + result; 

 } 

 return result; 

function encodeHex(str){ 

 var result = “”; 

 for (var i=0; i

 result += pad(toHex(str.charCodeAt(i)&0xff),2,’0′); 

 } 

 return result; 

function decodeHex(str){ 

 str = str.replace(new RegExp(“s/[^0-9a-zA-Z]//g”)); 

 var result = “”; 

 var nextchar = “”; 

 for (var i=0; i

 nextchar += str.charAt(i); 

 if (nextchar.length == 2){ 

 result += ntos(eval(‘0x’+nextchar)); 

 nextchar = “”; 

 } 

 } 

 return result; 

//–> 

Enter text to encode or decode here. 

 

URL 

Base 64 

Hex 

 

Base64 encode/decode was ported from a Java Base64 encoder/decoder. 

Base64 encode/decode was ported to Macromedia Actionscript. 

License

 

This program is free software; you can redistribute it and/or modify it 

under the terms of the GNU General Public License as published by the Free 

Software Foundation; either version 2 of the License, or (at your option) 

any later version.

 

This program is distributed in the hope that it will be useful, 

but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 

or FITNESS FOR A PARTICULAR PURPOSE. See the 

GNU 

General Public License for more details.

 

More converters, calculators, and other JavaScript goodies 

ostermiller.org (site index) 

Copyright Stephen Ostermiller 2003-2006

 

© 版权声明

相关文章