中国.Rick

IT.Man

Base64编码 js与.net之间的互通函数

JS:

var StringUtil = new function()
    {
    
        
this.Base64Encode = function(str)
        {
            
return base64encode(utf16to8(str));
        };
    
        
this.Base64Decode = function(str)
        {
            
return utf8to16(base64decode(str))
        };
    
        
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-16352535455565758596061-1-1-1-1-1-1-1012345678910111213141516171819202122232425-1-1-1-1-1-12627282930313233343536373839404142434445464748495051-1-1-1-1-1);
        
var base64encode = function(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;
        };
    
        
var base64decode = function(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;
        };
        
var utf16to8 = function(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;
        };
        
var utf8to16 = function(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 0case 1case 2case 3case 4case 5case 6case 7:
                        out 
+= str.charAt(i - 1);
                        
break;
                    
case 12case 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;
        }
    } 

ASP.NET C#代码

        /// <summary>
    
/// Base64 (UTF-8) 编码/解码。
    
/// </summary>
    public class Base64
    {
        
/// <summary>
        
/// 解码。
        
/// </summary>
        
/// <param name="base64Str"></param>
        
/// <returns></returns>
        public static string Decode(string base64Str)
        {
            
return System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(base64Str));
        }
        
/// <summary>
        
/// 编码。
        
/// </summary>
        
/// <param name="str"></param>
        
/// <returns></returns>
        public static string Encode(string utf8Str)
        {
            
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(utf8Str));
        }
    }

« 上一篇 | 下一篇 »
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 and Theme By BokeZhuti.cn

Copyright RickC.cn [浙ICP备09040539] Some Rights Reserved.