web端加密

<!DOCTYPE html>
<html style="height:100vh;">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport"   content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>加密</title>
  </head>
  <body style="height:100vh; margin:0">
    <input id="a1" style="margin:15px;width:70%" />
    <input id="a2" onClick="abc()" value="生成" type="button" style="margin:15px" />
    <input id="a4" onClick="cba()" value="解码" type="button" style="margin:15px" />
    <input id="a6" onClick="clearr()" value="清空" type="button" style="margin:15px" />
    <div id = "a3" style="margin:15px"></div>
    
    <div id = "a5" style="margin:15px" />
    
  </body>
  <script type="text/javascript">
  
  function clearr() {
    var text = document.getElementById("a1");
    text.value = "";
    var a3 = document.getElementById("a3");
    a3.innerHTML = "";
    var a5 = document.getElementById("a5");
    a5.innerHTML = "";
  }
  
  function abc(){
    var text = document.getElementById("a1");
    var a3 = document.getElementById("a3");
    
    a3.innerHTML = en(text.value);
    var a5 = document.getElementById("a5");
    a5.innerHTML = '<input id="a6" onClick="cut()" value="剪切" type="button" />';
  }
  
  function cut() {
    var text = document.getElementById("a1");
    var a3 = document.getElementById("a3");
    var a5 = document.getElementById("a5");
    text.value = a3.innerHTML;
    a3.innerHTML = "";
    a5.innerHTML = "";
  }
  
  function cba(){
    var text = document.getElementById("a1");
    var a3 = document.getElementById("a3");
    a3.innerHTML = xxtea_decrypt(base64decode(text.value),"key:washing.com/android.apk");
    var a5 = document.getElementById("a5");
    a5.innerHTML = '<input id="a6" onClick="cut()" value="剪切" type="button" />';
  }
  
  function en(v){
    return base64encode(xxteaEncrypt(v,"key:washing.com/android.apk"));
  }
  
  function long2str(v, w) {
    var vl = v.length;
    var n = (vl - 1) << 2;
    if (w) {
      var m = v[vl - 1];
      if ((m < n - 3) || (m > n)) return null;
      n = m;
    }
    for (var i = 0; i < vl; i++) {
      v[i] = String.fromCharCode(v[i] & 0xff,
      v[i] >>> 8 & 0xff,
      v[i] >>> 16 & 0xff,
      v[i] >>> 24 & 0xff);
    }
    if (w) {
      return v.join('').substring(0, n);
    }
    else {
      return v.join('');
    }
  }
  function str2long(s, w) {
    var len = s.length;
    var v = [];
    for (var i = 0; i < len; i += 4) {
      v[i >> 2] = s.charCodeAt(i)
      | s.charCodeAt(i + 1) << 8
      | s.charCodeAt(i + 2) << 16
      | s.charCodeAt(i + 3) << 24;
    }
    if (w) {
      v[v.length] = len;
    }
    return v;
  }
  function xxteaEncrypt(str, key) {
    if (str == "") {
      return "";
    }
    var v = str2long(str, true);
    var k = str2long(key, false);
    if (k.length < 4) {
      k.length = 4;
    }
    var n = v.length - 1;
    var z = v[n], y = v[0], delta = 0x9E3779B9;
    var mx, e, p, q = Math.floor(6 + 52 / (n + 1)), sum = 0;
    while (0 < q--) {
      sum = sum + delta & 0xffffffff;
      e = sum >>> 2 & 3;
      for (p = 0; p < n; p++) {
        y = v[p + 1];
        mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
        z = v[p] = v[p] + mx & 0xffffffff;
      }
      y = v[0];
      mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
      z = v[n] = v[n] + mx & 0xffffffff;
    }
    return long2str(v, false);
  }
  function xxtea_decrypt(str, key) {
    if (str == "") {
      return "";
    }
    var v = str2long(str, false);
    var k = str2long(key, false);
    if (k.length < 4) {
      k.length = 4;
    }
    var n = v.length - 1;
    var z = v[n - 1], y = v[0], delta = 0x9E3779B9;
    var mx, e, p, q = Math.floor(6 + 52 / (n + 1)), sum = q * delta & 0xffffffff;
    while (sum != 0) {
      e = sum >>> 2 & 3;
      for (p = n; p > 0; p--) {
        z = v[p - 1];
        mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
        y = v[p] = v[p] - mx & 0xffffffff;
      }
      z = v[n];
      mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
      y = v[0] = v[0] - mx & 0xffffffff;
      sum = sum - delta & 0xffffffff;
    }
    return long2str(v, true);
  }
  var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  function base64encode(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 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, -1, 62, -1, -1, -1, 63,
  52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
  -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
  15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
  -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
  
  function base64decode(str) {
      var c1, c2, c3, c4;
      var i, len, out;
      len = str.length;
      i = 0;
      out = "";
      while(i < len) {
             /* c1 */
             do {
               c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
             } while(i < len && c1 == -1);
             if(c1 == -1)
               break;
             /* c2 */
             do {
               c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
             } while(i < len && c2 == -1);
             if(c2 == -1)
               break;
             out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
             /* c3 */
             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));
             /* c4 */
             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;
    }

  </script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值