js字符串加密的几种方法

在做web前端的时候免不了要用javascript来处理一些简单操作,其实如果要用好JQuery, Prototype,Dojo 等其中一两个javascript框架并不简单,它提高你的web交互和用户体验,从而能使你的web前端有非一样的感觉,如海阔凭鱼跃。当然,对于javascript我也是半桶水。高手莫怪,在此我仅总结学习一下,以备用到时查录。

今天不说框架的事情,就从最基本的、比较常用的javascript代码入手。

先说简单字符串加密的事情

 

View Code
/*8进制加密*/
function EnEight(){
    
var monyer = new Array();var i,s;
    
for(i=0;i<txt.value.length;i++)
        monyer
+="\\"+txt.value.charCodeAt(i).toString(8); 
    txt.value
=monyer;
}
/*8进制解密*/
function DeEight(){
    
var monyer = new Array();var i;
    
var s=txt.value.split("\\");
    
for(i=1;i<s.length;i++)
        monyer
+=String.fromCharCode(parseInt(s[i],8));
    txt.value
=monyer;
}
View Code
/*10进制加密*/
function Encrypt(){
    
var monyer = new Array();var i,s;
    
for(i=0;i<txt.value.length;i++){
        s
=txt.value.charCodeAt(i).toString(16); 
        
if(Decimal1.checked) monyer+="&#"+txt.value.charCodeAt(i)+";";
        
else if (Decimal2.checked) monyer+="&#"+new Array(7-String(s).length).join("0")+txt.value.charCodeAt(i);
        
else monyer+=txt.value.charCodeAt(i)+",";
    }txt.value
=monyer;
}
/*10进制解密*/
function Decrypt(){
    
var monyer = new Array();var i;
    
if(Decimal1.checked){
        
var s=txt.value.split(";");
        
for(i=0;i<s.length;i++){
            s[i]
=s[i].replace('&#','');
            monyer
+=String.fromCharCode(s[i]);
        }
    }
else if(Decimal2.checked){
        
var s=txt.value.split("&");
        
for(i=1;i<s.length;i++){
            s[i]
=s[i].replace('#','');
            monyer
+=String.fromCharCode(s[i]);
        }
    }
else{
        
var s=txt.value.split(",");
        
for(i=0;i<s.length;i++)
            monyer
+=String.fromCharCode(s[i]);
    }txt.value
=monyer;
}
View Code
/*16进制加密*/
function JavaEn(){
    
var monyer = new Array();var i,s;
    
for(i=0;i<txt.value.length;i++){
        s
=txt.value.charCodeAt(i).toString(16); 
        
if(hex1.checked) monyer+="\\u"+new Array(5-String(s).length).join("0")+s;
        
else if(hex2.checked) monyer+="&#x"+new Array(5-String(s).length).join("0")+s+";";
        
else if(hex3.checked) monyer+="\\x"+new Array(5-String(s).length).join("0")+s;
        
else monyer+="\\"+new Array(5-String(s).length).join("0")+s;
    }txt.value
=monyer;
}
var p=document.documentElement.outerHTML.length;
/*16进制解密*/
function JavaDe(){
    
if(hex1.checked){
        
var monyer = new Array();var i;
        
var s=txt.value.split("\\");
        
for(i=1;i<s.length;i++){
            s[i]
=s[i].replace('u','');
            monyer
+=String.fromCharCode(parseInt(s[i],16));
        }
    }
else if(hex2.checked){
        
var monyer = new Array();var i;
        
var s=txt.value.split(";");
        
for(i=0;i<s.length;i++){
            s[i]
=s[i].replace('&#x','');
            monyer
+=String.fromCharCode(parseInt(s[i],16));
        }
    }
    
else if(hex3.checked){
        
var monyer = new Array();var i;
        
var s=txt.value.split("\\");
        
for(i=1;i<s.length;i++){
            s[i]
=s[i].replace('x','');
            monyer
+=String.fromCharCode(parseInt(s[i],16));
        }
    }
else{
        
var monyer = new Array();var i;
        
var s=txt.value.split("\\");
        
for(i=1;i<s.length;i++)
            monyer
+=String.fromCharCode(parseInt(s[i],16));
    }txt.value
=monyer;
}
/*任意进制加密*/
function EnChTo(h){
    
var monyer = new Array();var i,s;
    
for(i=0;i<txt.value.length;i++)
        monyer
+=txt.value.charCodeAt(i).toString(h)+" "
    txt.value
=monyer;
}
/*任意进制解密*/
function DeChTo(h){
    
var monyer = new Array();var i;
    
var s=txt.value.split(" ");
    
for(i=0;i<s.length;i++)
        monyer
+=String.fromCharCode(parseInt(s[i],h));
    txt.value
=monyer;
}
 

 

加密类似URL的字符

 

 View Code

function URLEncode(plaintext )
{
var SAFECHARS = "0123456789" + // Numeric
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
"abcdefghijklmnopqrstuvwxyz" +
"-_.!~*'()"// RFC2396 Mark characters
var HEX = "0123456789ABCDEF";
var encoded = "";
for (var i = 0; i < plaintext.length; i++ ) {
var ch = plaintext.charAt(i);
if (ch == " ") {
encoded 
+= "+"// x-www-urlencoded, rather than %20
else if (SAFECHARS.indexOf(ch) != -1) {
encoded 
+= ch;
else {
var charCode = ch.charCodeAt(0);
if (charCode > 255) {
encoded 
+= "+";
else {
encoded 
+= "%";
encoded 
+= HEX.charAt((charCode >> 4& 0xF);
encoded 
+= HEX.charAt(charCode & 0xF);
}
}
// for
return encoded;
};

 //html Encode

View Code
  function HtmlEncode(i)
                {
                
if (i == 1)
                    txt.value
                        
= txt.value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g,
                                                                                                                  
'&gt;');

                
if (i == 2)
                    txt.value
                        
= txt.value.replace(/&amp;/g, '&').replace(/&quot;/g, '\"').replace(/&lt;/g,
                                                                                            
'<').replace(/&gt;/g, '>')
                }

            
var hex_chr = "0123456789abcdef";

            
function rhex(num)
                {
                str 
= "";

                
for (j = 0; j <= 3; j++)
                    str 
+= hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F+ hex_chr.charAt((num >> (j * 8)) & 0x0F);

                
return str
                }

 

//base64

 

View Code
 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
            
var base64DecodeChars = new Array(-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
                                              
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
                                              
-1-1-1-1-1-1-162-1-1-163525354555657,
                                              
58596061-1-1-1-1-1-1-10,  1,  2,  3,  4,  5,  6,
                                              
7,  8,  9,  101112131415161718192021222324,
                                              
25-1-1-1-1-1-12627282930313233343536,
                                              
373839404142434445464748495051-1-1-1,
                                              
-1-1);

            
function base64encode(str)
                {
                
var out, i, len;
                
var c1, c2, c3;
                len 
= str.length;
                i 
= 0;
                out 
= "";

                
while (i < len)
                    {
                    c1 
= str.charCodeAt(i++& 0xff;

                    
if (i == len)
                        {
                        out 
+= base64EncodeChars.charAt(c1 >> 2);
                        out 
+= base64EncodeChars.charAt((c1 & 0x3<< 4);
                        out 
+= "==";
                        
break
                        }

                    c2 
= str.charCodeAt(i++);

                    
if (i == len)
                        {
                        out 
+= base64EncodeChars.charAt(c1 >> 2);
                        out 
+= base64EncodeChars.charAt(((c1 & 0x3<< 4| ((c2 & 0xF0>> 4));
                        out 
+= base64EncodeChars.charAt((c2 & 0xF<< 2);
                        out 
+= "=";
                        
break
                        }

                    c3 
= str.charCodeAt(i++);
                    out 
+= base64EncodeChars.charAt(c1 >> 2);
                    out 
+= base64EncodeChars.charAt(((c1 & 0x3<< 4| ((c2 & 0xF0>> 4));
                    out 
+= base64EncodeChars.charAt(((c2 & 0xF<< 2| ((c3 & 0xC0>> 6));
                    out 
+= base64EncodeChars.charAt(c3 & 0x3F)
                    }

                
return out
                }

            
function base64decode(str)
                {
                
var c1, c2, c3, c4;
                
var i, len, out;
                len 
= str.length;
                i 
= 0;
                out 
= "";

                
while (i < len)
                    {
                    
do
                        {
                        c1 
= base64DecodeChars[str.charCodeAt(i++& 0xff]
                        } 
while (i < len && c1 == -1);

                    
if (c1 == -1)
                        
break;

                    
do
                        {
                        c2 
= base64DecodeChars[str.charCodeAt(i++& 0xff]
                        } 
while (i < len && c2 == -1);

                    
if (c2 == -1)
                        
break;

                    out 
+= String.fromCharCode((c1 << 2| ((c2 & 0x30>> 4));

                    
do
                        {
                        c3 
= str.charCodeAt(i++& 0xff;

                        
if (c3 == 61)
                            
return out;

                        c3 
= base64DecodeChars[c3]
                        } 
while (i < len && c3 == -1);

                    
if (c3 == -1)
                        
break;

                    out 
+= String.fromCharCode(((c2 & 0XF<< 4| ((c3 & 0x3C>> 2));

                    
do
                        {
                        c4 
= str.charCodeAt(i++& 0xff;

                        
if (c4 == 61)
                            
return out;

                        c4 
= base64DecodeChars[c4]
                        } 
while (i < len && c4 == -1);

                    
if (c4 == -1)
                        
break;

                    out 
+= String.fromCharCode(((c3 & 0x03<< 6| c4)
                    }

                
return out
                }

//utf8 <->16

 

View Code
 function utf16to8(str)
                {
                
var out, i, len, c;
                out 
= "";
                len 
= str.length;

                
for (i = 0; i < len; i++)
                    {
                    c 
= str.charCodeAt(i);

                    
if ((c >= 0x0001&& (c <= 0x007F))
                        {
                        out 
+= str.charAt(i)
                        }

                    
else if (c > 0x07FF)
                        {
                        out 
+= String.fromCharCode(0xE0 | ((c >> 12& 0x0F));
                        out 
+= String.fromCharCode(0x80 | ((c >> 6& 0x3F));
                        out 
+= String.fromCharCode(0x80 | ((c >> 0& 0x3F))
                        }

                    
else
                        {
                        out 
+= String.fromCharCode(0xC0 | ((c >> 6& 0x1F));
                        out 
+= String.fromCharCode(0x80 | ((c >> 0& 0x3F))
                        }
                    }

                
return out
                }

            
function utf8to16(str)
                {
                
var out, i, len, c;
                
var char2, char3;
                out 
= "";
                len 
= str.length;
                i 
= 0;

                
while (i < len)
                    {
                    c 
= str.charCodeAt(i++);

                    
switch (c >> 4)
                        {
                        
case 0:
                        
case 1:
                        
case 2:
                        
case 3:
                        
case 4:
                        
case 5:
                        
case 6:
                        
case 7:
                            out 
+= str.charAt(i - 1);

                            
break;

                        
case 12:
                        
case 13:
                            char2 
= str.charCodeAt(i++);

                            out 
+= String.fromCharCode(((c & 0x1F<< 6| (char2 & 0x3F));
                            
break;

                        
case 14:
                            char2 
= str.charCodeAt(i++);

                            char3 
= str.charCodeAt(i++);
                            out 
+= String.fromCharCode(((c & 0x0F<< 12| ((char2 & 0x3F<< 6)
                                                           
| ((char3 & 0x3F<< 0));
                            
break
                        }
                    }

                
return out
                }

 

 

//MD5

View Code
 function str2blks_MD5(str)
                {
                nblk 
= ((str.length + 8>> 6+ 1;
                blks 
= new Array(nblk * 16);

                
for (i = 0; i < nblk * 16; i++)
                    blks[i] 
= 0;

                
for (i = 0; i < str.length; i++)
                    blks[i 
>> 2|= str.charCodeAt(i) << ((i % 4* 8);

                blks[i 
>> 2|= 0x80 << ((i % 4* 8);
                blks[nblk 
* 16 - 2= str.length * 8;
                
return blks
                }

            
function add(x, y)
                {
                
var lsw = (x & 0xFFFF+ (y & 0xFFFF);
                
var msw = (x >> 16+ (y >> 16+ (lsw >> 16);
                
return (msw << 16| (lsw & 0xFFFF)
                }

            
function rol(num, cnt)
                {
                
return (num << cnt) | (num >>> (32 - cnt))
                }

            
function cmn(q, a, b, x, s, t)
                {
                
return add(rol(add(add(a, q), add(x, t)), s), b)
                }

            
function ff(a, b, c, d, x, s, t)
                {
                
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
                }

            
function gg(a, b, c, d, x, s, t)
                {
                
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
                }

            
function hh(a, b, c, d, x, s, t)
                {
                
return cmn(b ^ c ^ d, a, b, x, s, t)
                }

            
function ii(a, b, c, d, x, s, t)
                {
                
return cmn(c ^ (b | (~d)), a, b, x, s, t)
                }

            
function calcMD5(str)
                {
                x 
= str2blks_MD5(str);
                a 
= 1732584193;
                b 
= -271733879;
                c 
= -1732584194;
                d 
= 271733878;

                
for (i = 0; i < x.length; i += 16)
                    {
                    olda 
= a;
                    oldb 
= b;
                    oldc 
= c;
                    oldd 
= d;
                    a 
= ff(a, b, c, d, x[i + 0], 7-680876936);
                    d 
= ff(d, a, b, c, x[i + 1], 12-389564586);
                    c 
= ff(c, d, a, b, x[i + 2], 17606105819);
                    b 
= ff(b, c, d, a, x[i + 3], 22-1044525330);
                    a 
= ff(a, b, c, d, x[i + 4], 7-176418897);
                    d 
= ff(d, a, b, c, x[i + 5], 121200080426);
                    c 
= ff(c, d, a, b, x[i + 6], 17-1473231341);
                    b 
= ff(b, c, d, a, x[i + 7], 22-45705983);
                    a 
= ff(a, b, c, d, x[i + 8], 71770035416);
                    d 
= ff(d, a, b, c, x[i + 9], 12-1958414417);
                    c 
= ff(c, d, a, b, x[i + 10], 17-42063);
                    b 
= ff(b, c, d, a, x[i + 11], 22-1990404162);
                    a 
= ff(a, b, c, d, x[i + 12], 71804603682);
                    d 
= ff(d, a, b, c, x[i + 13], 12-40341101);
                    c 
= ff(c, d, a, b, x[i + 14], 17-1502002290);
                    b 
= ff(b, c, d, a, x[i + 15], 221236535329);
                    a 
= gg(a, b, c, d, x[i + 1], 5-165796510);
                    d 
= gg(d, a, b, c, x[i + 6], 9-1069501632);
                    c 
= gg(c, d, a, b, x[i + 11], 14643717713);
                    b 
= gg(b, c, d, a, x[i + 0], 20-373897302);
                    a 
= gg(a, b, c, d, x[i + 5], 5-701558691);
                    d 
= gg(d, a, b, c, x[i + 10], 938016083);
                    c 
= gg(c, d, a, b, x[i + 15], 14-660478335);
                    b 
= gg(b, c, d, a, x[i + 4], 20-405537848);
                    a 
= gg(a, b, c, d, x[i + 9], 5568446438);
                    d 
= gg(d, a, b, c, x[i + 14], 9-1019803690);
                    c 
= gg(c, d, a, b, x[i + 3], 14-187363961);
                    b 
= gg(b, c, d, a, x[i + 8], 201163531501);
                    a 
= gg(a, b, c, d, x[i + 13], 5-1444681467);
                    d 
= gg(d, a, b, c, x[i + 2], 9-51403784);
                    c 
= gg(c, d, a, b, x[i + 7], 141735328473);
                    b 
= gg(b, c, d, a, x[i + 12], 20-1926607734);
                    a 
= hh(a, b, c, d, x[i + 5], 4-378558);
                    d 
= hh(d, a, b, c, x[i + 8], 11-2022574463);
                    c 
= hh(c, d, a, b, x[i + 11], 161839030562);
                    b 
= hh(b, c, d, a, x[i + 14], 23-35309556);
                    a 
= hh(a, b, c, d, x[i + 1], 4-1530992060);
                    d 
= hh(d, a, b, c, x[i + 4], 111272893353);
                    c 
= hh(c, d, a, b, x[i + 7], 16-155497632);
                    b 
= hh(b, c, d, a, x[i + 10], 23-1094730640);
                    a 
= hh(a, b, c, d, x[i + 13], 4681279174);
                    d 
= hh(d, a, b, c, x[i + 0], 11-358537222);
                    c 
= hh(c, d, a, b, x[i + 3], 16-722521979);
                    b 
= hh(b, c, d, a, x[i + 6], 2376029189);
                    a 
= hh(a, b, c, d, x[i + 9], 4-640364487);
                    d 
= hh(d, a, b, c, x[i + 12], 11-421815835);


                    c 
= hh(c, d, a, b, x[i + 15], 16530742520);
                    b 
= hh(b, c, d, a, x[i + 2], 23-995338651);
                    a 
= ii(a, b, c, d, x[i + 0], 6-198630844);
                    d 
= ii(d, a, b, c, x[i + 7], 101126891415);
                    c 
= ii(c, d, a, b, x[i + 14], 15-1416354905);
                    b 
= ii(b, c, d, a, x[i + 5], 21-57434055);
                    a 
= ii(a, b, c, d, x[i + 12], 61700485571);
                    d 
= ii(d, a, b, c, x[i + 3], 10-1894986606);
                    c 
= ii(c, d, a, b, x[i + 10], 15-1051523);
                    b 
= ii(b, c, d, a, x[i + 1], 21-2054922799);
                    a 
= ii(a, b, c, d, x[i + 8], 61873313359);
                    d 
= ii(d, a, b, c, x[i + 15], 10-30611744);
                    c 
= ii(c, d, a, b, x[i + 6], 15-1560198380);
                    b 
= ii(b, c, d, a, x[i + 13], 211309151649);
                    a 
= ii(a, b, c, d, x[i + 4], 6-145523070);
                    d 
= ii(d, a, b, c, x[i + 11], 10-1120210379);
                    c 
= ii(c, d, a, b, x[i + 2], 15718787259);
                    b 
= ii(b, c, d, a, x[i + 9], 21-343485551);
                    a 
= add(a, olda);
                    b 
= add(b, oldb);
                    c 
= add(c, oldc);
                    d 
= add(d, oldd)
                    }

                
return rhex(a) + rhex(b) + rhex(c) + rhex(d)
                }

 

 

posted on 2011-05-17 14:41  陈国利  阅读(37419)  评论(4编辑  收藏  举报