• Js/Jquery- Base64和UrlEncode编码解码


      最近几天遇到一些URL参数明文显示的问题,因为是明文显示,容易让人通过改变参数查看到他没有权限看到内容。

      一开始我的做法是自定义了规则,然后原始的那种URL编码。可是URL编译后效果不理想,他无法编译数字,而且编码后的字符串太长。

      最后我在网上用了BASE64这种。感觉还可以。摘录下来,做一下备忘,以后还会用到

      C# BASE64 解码和编码

           string a = "【OK,Let's GO】";
           byte[] b = System.Text.Encoding.Default.GetBytes(a);
           //转成 Base64 形式的 System.String
           a = Convert.ToBase64String(b);
           Console.WriteLine(a);
    
     
    
         解码:     
    
         //转回到原来的 System.String。
          byte[] c = Convert.FromBase64String(a);
    
          a = System.Text.Encoding.Default.GetString(c);
          Console.WriteLine(a);
     

      JS BASE64 解码和编码

    /**
    *
    *  Base64 encode / decode
    *
    *  @author haitao.tu
    *  @date   2010-04-26
    *  @email  tuhaitao@foxmail.com
    *
    */
     
    function Base64() {
     
        // private property
        _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
     
        // 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(/
    /g,"
    ");
            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;
        }
    }

    JS测试页面

    1.<html>  
    2.    <head>  
    3.        <script src="lib/base64.js" type="text/javascript"></script>  
    4.        <script type="text/javascript">  
    5.            var b = new Base64();   
    6.            var str = b.encode("admin:admin");   
    7.            alert("base64 encode:" + str);   
    8.            str = b.decode(str);   
    9.            alert("base64 decode:" + str);   
    10.        </script>  
    11.    </head>  
    12.    <body>  
    13.    </body>  
    14.</html> 

    顺便把Jquery的UrlEncode也记在这里: 

    Jquery字符UrlEncode 编码、解码 --C#UrlEncode

    C#:Server.UrlEncode(ur)

    Jquery解码:decodeURIComponent(url);

    Jquery编码:encodeURIComponent(url);

  • 相关阅读:
    eclipse快捷键 Eclipse快捷键 10个最有用的快捷键
    ssh之雇员管理系统(5)将struts+spring整合2
    ssh之雇员管理系统(4)改进的hibernate测试
    java中常常建包时,这些包具体是什么意思呢?+项目开发流程、实战
    ssh之雇员管理系统(1)spring测试
    JUnit4概述
    ssh之雇员管理系统(5)添加struts测试
    SQl查询数据库表名、表的列名
    关于人脉大PK的二三事 推荐的方法
    JavaScript有用的代码(ie,save)
  • 原文地址:https://www.cnblogs.com/cxeye/p/3673160.html
Copyright © 2020-2023  润新知