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

Laughing
2018-01-18 / 0 评论 / 1,300 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月21日,已超过302天没有更新,若内容或图片失效,请留言反馈。

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

JavaScript加密、解密代码

function Base64() {  
  
            // private property  
            _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/=";  
  
            // public method for encoding  
            this.encode = function (input) {  
                var output = "";  
                var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
                var i = 0;  
                input = _utf8_encode(input);  
                while (i < input.length) {  
                    chr1 = input.charCodeAt(i++);  
                    chr2 = input.charCodeAt(i++);  
                    chr3 = input.charCodeAt(i++);  
                    enc1 = chr1 >> 2;  
                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
                    enc4 = chr3 & 63;  
                    if (isNaN(chr2)) {  
                        enc3 = enc4 = 64;  
                    } else if (isNaN(chr3)) {  
                        enc4 = 64;  
                    }  
                    output = output +  
                        _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +  
                        _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  
                }  
                return output;  
            }  
  
            // public method for decoding  
            this.decode = function (input) {  
                var output = "";  
                var chr1, chr2, chr3;  
                var enc1, enc2, enc3, enc4;  
                var i = 0;  
                input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  
                while (i < input.length) {  
                    enc1 = _keyStr.indexOf(input.charAt(i++));  
                    enc2 = _keyStr.indexOf(input.charAt(i++));  
                    enc3 = _keyStr.indexOf(input.charAt(i++));  
                    enc4 = _keyStr.indexOf(input.charAt(i++));  
                    chr1 = (enc1 << 2) | (enc2 >> 4);  
                    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);  
                    chr3 = ((enc3 & 3) << 6) | enc4;  
                    output = output + String.fromCharCode(chr1);  
                    if (enc3 != 64) {  
                        output = output + String.fromCharCode(chr2);  
                    }  
                    if (enc4 != 64) {  
                        output = output + String.fromCharCode(chr3);  
                    }  
                }  
                output = _utf8_decode(output);  
                return output;  
            }  
  
            // private method for UTF-8 encoding  
            _utf8_encode = function (string) {  
                string = string.replace(/\r\n/g, "\n");  
                var utftext = "";  
                for (var n = 0; n < string.length; n++) {  
                    var c = string.charCodeAt(n);  
                    if (c < 128) {  
                        utftext += String.fromCharCode(c);  
                    } else if ((c > 127) && (c < 2048)) {  
                        utftext += String.fromCharCode((c >> 6) | 192);  
                        utftext += String.fromCharCode((c & 63) | 128);  
                    } else {  
                        utftext += String.fromCharCode((c >> 12) | 224);  
                        utftext += String.fromCharCode(((c >> 6) & 63) | 128);  
                        utftext += String.fromCharCode((c & 63) | 128);  
                    }  
  
                }  
                return utftext;  
            }  
  
            // private method for UTF-8 decoding  
            _utf8_decode = function (utftext) {  
                var string = "";  
                var i = 0;  
                var c = c1 = c2 = 0;  
                while (i < utftext.length) {  
                    c = utftext.charCodeAt(i);  
                    if (c < 128) {  
                        string += String.fromCharCode(c);  
                        i++;  
                    } else if ((c > 191) && (c < 224)) {  
                        c2 = utftext.charCodeAt(i + 1);  
                        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));  
                        i += 2;  
                    } else {  
                        c2 = utftext.charCodeAt(i + 1);  
                        c3 = utftext.charCodeAt(i + 2);  
                        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));  
                        i += 3;  
                    }  
                }  
                return string;  
            }  
        }

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

.net代码

#region 5.0 Base64加密 需指定编码 +static string Base64Encrypt(string source, Encoding encode)  
      /// <summary>  
      /// 5.0 Base64加密 需指定编码  
      /// </summary>  
      /// <param name="strData"></param>  
      /// <param name="encod"></param>  
      /// <returns></returns>  
      public static string Base64EncryptByEncode(string source, Encoding encode)  
      {  
          return Convert.ToBase64String(encode.GetBytes(source));  
      }   
      #endregion  
 
      #region 5.1 Base64解密 需指定编码 +static string Base64Decrypt(string source, Encoding encode)  
      /// <summary>  
      /// 5.1 Base64加密 需指定编码  
      /// </summary>  
      /// <param name="strData"></param>  
      /// <param name="encod"></param>  
      /// <returns></returns>  
      public static string Base64DecryptByEncode(string source, Encoding encode)  
      {  
          return encode.GetString(Convert.FromBase64String(source));  
      }  
      #endregion  
 
      #region 5.2 Base64加密 (默认UTF8编码)+static string Base64Encrypt(string source)  
      /// <summary>  
      /// 5.2 Base64加密  
      /// </summary>  
      /// <param name="strData"></param>  
      /// <returns></returns>  
      public static string Base64Encrypt(string source)  
      {  
          return Convert.ToBase64String(Encoding.UTF8.GetBytes(source));  
      }  
      #endregion  
 
      #region 5.3 Base64解密 +static string Base64Decrypt(string source)  
      /// <summary>  
      /// 5.3 Base64加密(默认UTF8编码)  
      /// </summary>  
      /// <param name="strData"></param>  
      /// <param name="encod"></param>  
      /// <returns></returns>  
      public static string Base64Decrypt(string source)  
      {  
          return Encoding.UTF8.GetString(Convert.FromBase64String(source));  
      }  
      #endregion
0

评论 (0)

取消
  1. 头像
    yydngs
    Windows 10 · Google Chrome

    看看一下

    回复
  2. 头像
    fee
    Windows 10 · Google Chrome

    嗯嗯嗯

    回复