JavaScript结合.Net实现base64加、解密

原创 Laughing  2018-01-18 14:35  阅读 587 次 评论 0 条

主要解决问题,客户端通过utf8进行base64加密后,将加密后的信息传送到服务端,服务端对加密后的信息进行解密,获取明文。

JavaScript加密、解密代码
  1. function Base64() {  
  2.   
  3.             // private property  
  4.             _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/=";  
  5.   
  6.             // public method for encoding  
  7.             this.encode = function (input) {  
  8.                 var output = "";  
  9.                 var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
  10.                 var i = 0;  
  11.                 input = _utf8_encode(input);  
  12.                 while (i < input.length) {  
  13.                     chr1 = input.charCodeAt(i++);  
  14.                     chr2 = input.charCodeAt(i++);  
  15.                     chr3 = input.charCodeAt(i++);  
  16.                     enc1 = chr1 >> 2;  
  17.                     enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
  18.                     enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
  19.                     enc4 = chr3 & 63;  
  20.                     if (isNaN(chr2)) {  
  21.                         enc3 = enc4 = 64;  
  22.                     } else if (isNaN(chr3)) {  
  23.                         enc4 = 64;  
  24.                     }  
  25.                     output = output +  
  26.                         _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +  
  27.                         _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  
  28.                 }  
  29.                 return output;  
  30.             }  
  31.   
  32.             // public method for decoding  
  33.             this.decode = function (input) {  
  34.                 var output = "";  
  35.                 var chr1, chr2, chr3;  
  36.                 var enc1, enc2, enc3, enc4;  
  37.                 var i = 0;  
  38.                 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  
  39.                 while (i < input.length) {  
  40.                     enc1 = _keyStr.indexOf(input.charAt(i++));  
  41.                     enc2 = _keyStr.indexOf(input.charAt(i++));  
  42.                     enc3 = _keyStr.indexOf(input.charAt(i++));  
  43.                     enc4 = _keyStr.indexOf(input.charAt(i++));  
  44.                     chr1 = (enc1 << 2) | (enc2 >> 4);  
  45.                     chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);  
  46.                     chr3 = ((enc3 & 3) << 6) | enc4;  
  47.                     output = output + String.fromCharCode(chr1);  
  48.                     if (enc3 != 64) {  
  49.                         output = output + String.fromCharCode(chr2);  
  50.                     }  
  51.                     if (enc4 != 64) {  
  52.                         output = output + String.fromCharCode(chr3);  
  53.                     }  
  54.                 }  
  55.                 output = _utf8_decode(output);  
  56.                 return output;  
  57.             }  
  58.   
  59.             // private method for UTF-8 encoding  
  60.             _utf8_encode = function (string) {  
  61.                 string = string.replace(/\r\n/g, "\n");  
  62.                 var utftext = "";  
  63.                 for (var n = 0; n < string.length; n++) {  
  64.                     var c = string.charCodeAt(n);  
  65.                     if (c < 128) {  
  66.                         utftext += String.fromCharCode(c);  
  67.                     } else if ((c > 127) && (c < 2048)) {  
  68.                         utftext += String.fromCharCode((c >> 6) | 192);  
  69.                         utftext += String.fromCharCode((c & 63) | 128);  
  70.                     } else {  
  71.                         utftext += String.fromCharCode((c >> 12) | 224);  
  72.                         utftext += String.fromCharCode(((c >> 6) & 63) | 128);  
  73.                         utftext += String.fromCharCode((c & 63) | 128);  
  74.                     }  
  75.   
  76.                 }  
  77.                 return utftext;  
  78.             }  
  79.   
  80.             // private method for UTF-8 decoding  
  81.             _utf8_decode = function (utftext) {  
  82.                 var string = "";  
  83.                 var i = 0;  
  84.                 var c = c1 = c2 = 0;  
  85.                 while (i < utftext.length) {  
  86.                     c = utftext.charCodeAt(i);  
  87.                     if (c < 128) {  
  88.                         string += String.fromCharCode(c);  
  89.                         i++;  
  90.                     } else if ((c > 191) && (c < 224)) {  
  91.                         c2 = utftext.charCodeAt(i + 1);  
  92.                         string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));  
  93.                         i += 2;  
  94.                     } else {  
  95.                         c2 = utftext.charCodeAt(i + 1);  
  96.                         c3 = utftext.charCodeAt(i + 2);  
  97.                         string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));  
  98.                         i += 3;  
  99.                     }  
  100.                 }  
  101.                 return string;  
  102.             }  
  103.         }  

通过Ajax将密文传送到服务端,服务端对密文进行解密

.net代码
  1. #region 5.0 Base64加密 需指定编码 +static string Base64Encrypt(string source, Encoding encode)  
  2.       /// <summary>  
  3.       /// 5.0 Base64加密 需指定编码  
  4.       /// </summary>  
  5.       /// <param name="strData"></param>  
  6.       /// <param name="encod"></param>  
  7.       /// <returns></returns>  
  8.       public static string Base64EncryptByEncode(string source, Encoding encode)  
  9.       {  
  10.           return Convert.ToBase64String(encode.GetBytes(source));  
  11.       }   
  12.       #endregion  
  13.  
  14.       #region 5.1 Base64解密 需指定编码 +static string Base64Decrypt(string source, Encoding encode)  
  15.       /// <summary>  
  16.       /// 5.1 Base64加密 需指定编码  
  17.       /// </summary>  
  18.       /// <param name="strData"></param>  
  19.       /// <param name="encod"></param>  
  20.       /// <returns></returns>  
  21.       public static string Base64DecryptByEncode(string source, Encoding encode)  
  22.       {  
  23.           return encode.GetString(Convert.FromBase64String(source));  
  24.       }  
  25.       #endregion  
  26.  
  27.       #region 5.2 Base64加密 (默认UTF8编码)+static string Base64Encrypt(string source)  
  28.       /// <summary>  
  29.       /// 5.2 Base64加密  
  30.       /// </summary>  
  31.       /// <param name="strData"></param>  
  32.       /// <returns></returns>  
  33.       public static string Base64Encrypt(string source)  
  34.       {  
  35.           return Convert.ToBase64String(Encoding.UTF8.GetBytes(source));  
  36.       }  
  37.       #endregion  
  38.  
  39.       #region 5.3 Base64解密 +static string Base64Decrypt(string source)  
  40.       /// <summary>  
  41.       /// 5.3 Base64加密(默认UTF8编码)  
  42.       /// </summary>  
  43.       /// <param name="strData"></param>  
  44.       /// <param name="encod"></param>  
  45.       /// <returns></returns>  
  46.       public static string Base64Decrypt(string source)  
  47.       {  
  48.           return Encoding.UTF8.GetString(Convert.FromBase64String(source));  
  49.       }  
  50.       #endregion  
本文地址:https://www.lisen.me/javascript-combined-with-net-to-implement-base64-addition-and-decryption.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情