zoukankan      html  css  js  c++  java
  • [JavaScript] Base64加密解密

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>js base64加密解密</title>
    </head>
    <body>
    <script>
    // 创建Base64对象
    var Base64 = {
     _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
     encode: function(e) {
      var t = "";
      var n, r, i, s, o, u, a;
      var f = 0;
      e = Base64._utf8_encode(e);
      while (f < e.length) {
       n = e.charCodeAt(f++);
       r = e.charCodeAt(f++);
       i = e.charCodeAt(f++);
       s = n >> 2;
       o = (n & 3) << 4 | r >> 4;
       u = (r & 15) << 2 | i >> 6;
       a = i & 63;
       if (isNaN(r)) {
        u = a = 64
       } else if (isNaN(i)) {
        a = 64
       }
       t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
      }
      return t
     },
     decode: function(e) {
      var t = "";
      var n, r, i;
      var s, o, u, a;
      var f = 0;
      e=e.replace(/[^A-Za-z0-9+/=]/g,"");
      while (f < e.length) {
       s = this._keyStr.indexOf(e.charAt(f++));
       o = this._keyStr.indexOf(e.charAt(f++));
       u = this._keyStr.indexOf(e.charAt(f++));
       a = this._keyStr.indexOf(e.charAt(f++));
       n = s << 2 | o >> 4;
       r = (o & 15) << 4 | u >> 2;
       i = (u & 3) << 6 | a;
       t = t + String.fromCharCode(n);
       if (u != 64) {
        t = t + String.fromCharCode(r)
       }
       if (a != 64) {
        t = t + String.fromCharCode(i)
       }
      }
      t = Base64._utf8_decode(t);
      return t
     },
     _utf8_encode: function(e) {
      e = e.replace(/rn/g, "n");
      var t = "";
      for (var n = 0; n < e.length; n++) {
       var r = e.charCodeAt(n);
       if (r < 128) {
        t += String.fromCharCode(r)
       } else if (r > 127 && r < 2048) {
        t += String.fromCharCode(r >> 6 | 192);
        t += String.fromCharCode(r & 63 | 128)
       } else {
        t += String.fromCharCode(r >> 12 | 224);
        t += String.fromCharCode(r >> 6 & 63 | 128);
        t += String.fromCharCode(r & 63 | 128)
       }
      }
      return t
     },
     _utf8_decode: function(e) {
      var t = "";
      var n = 0;
      var r = c1 = c2 = 0;
      while (n < e.length) {
       r = e.charCodeAt(n);
       if (r < 128) {
        t += String.fromCharCode(r);
        n++
       } else if (r > 191 && r < 224) {
        c2 = e.charCodeAt(n + 1);
        t += String.fromCharCode((r & 31) << 6 | c2 & 63);
        n += 2
       } else {
        c2 = e.charCodeAt(n + 1);
        c3 = e.charCodeAt(n + 2);
        t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
        n += 3
       }
      }
      return t
     }
    }
    // 定义字符串
    var string = '/pic?6dd819ze9-=s40649459b';
    // 加密
    var encodedString = Base64.encode(string);
    console.log(encodedString);
    // 解密
    var decodedString = Base64.decode(encodedString);
    console.log(decodedString);
    </script>
    </body>
    </html>

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/frost-yen/p/12171826.html
Copyright © 2011-2022 走看看