zoukankan      html  css  js  c++  java
  • php前后台登录交互明文传输使用base64加密

    3 base64加解密
    base64是通用的加解密方法,JavaScript也有现成的库可以使用,PHP更是有现成函数可用。
    解决方法如下。
    首先,前端引用base64加密库,推荐用支持中文的库:https://github.com/emn178/hi-base64
    数据提交之前,用base64的方法加密:
    var html_source = base64.encode(html_source)这样不论什么字符,都可以提交了,都是。
    然后,在PHP读取数据时,用base64_decode() 方法就可以解密了。
    $html_source = str_replace(' ', '+', $html_source);
    $html_source = base64_decode($html_source);

    下面是base64.js文件的内容

      1 /*
      2  * [hi-base64]{@link https://github.com/emn178/hi-base64}
      3  *
      4  * @version 0.2.1
      5  * @author Chen, Yi-Cyuan [emn178@gmail.com]
      6  * @copyright Chen, Yi-Cyuan 2014-2017
      7  * @license MIT
      8  */
      9 /*jslint bitwise: true */
     10 (function () {
     11     'use strict';
     12 
     13     var root = typeof window === 'object' ? window : {};
     14     var NODE_JS = !root.HI_BASE64_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
     15     if (NODE_JS) {
     16         root = global;
     17     }
     18     var COMMON_JS = !root.HI_BASE64_NO_COMMON_JS && typeof module === 'object' && module.exports;
     19     var AMD = typeof define === 'function' && define.amd;
     20     var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
     21     var BASE64_DECODE_CHAR = {
     22         'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8,
     23         'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16,
     24         'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24,
     25         'Z': 25, 'a': 26, 'b': 27, 'c': 28, 'd': 29, 'e': 30, 'f': 31, 'g': 32,
     26         'h': 33, 'i': 34, 'j': 35, 'k': 36, 'l': 37, 'm': 38, 'n': 39, 'o': 40,
     27         'p': 41, 'q': 42, 'r': 43, 's': 44, 't': 45, 'u': 46, 'v': 47, 'w': 48,
     28         'x': 49, 'y': 50, 'z': 51, '0': 52, '1': 53, '2': 54, '3': 55, '4': 56,
     29         '5': 57, '6': 58, '7': 59, '8': 60, '9': 61, '+': 62, '/': 63, '-': 62,
     30         '_': 63
     31     };
     32 
     33     var utf8ToBytes = function (str) {
     34         var bytes = [];
     35         for (var i = 0; i < str.length; i++) {
     36             var c = str.charCodeAt(i);
     37             if (c < 0x80) {
     38                 bytes[bytes.length] = c;
     39             } else if (c < 0x800) {
     40                 bytes[bytes.length] = 0xc0 | (c >> 6);
     41                 bytes[bytes.length] = 0x80 | (c & 0x3f);
     42             } else if (c < 0xd800 || c >= 0xe000) {
     43                 bytes[bytes.length] = 0xe0 | (c >> 12);
     44                 bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);
     45                 bytes[bytes.length] = 0x80 | (c & 0x3f);
     46             } else {
     47                 c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
     48                 bytes[bytes.length] = 0xf0 | (c >> 18);
     49                 bytes[bytes.length] = 0x80 | ((c >> 12) & 0x3f);
     50                 bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);
     51                 bytes[bytes.length] = 0x80 | (c & 0x3f);
     52             }
     53         }
     54         return bytes;
     55     };
     56 
     57     var decodeAsBytes = function (base64Str) {
     58         var v1, v2, v3, v4, bytes = [], index = 0, length = base64Str.length;
     59         if (base64Str.charAt(length - 2) === '=') {
     60             length -= 2;
     61         } else if (base64Str.charAt(length - 1) === '=') {
     62             length -= 1;
     63         }
     64 
     65         // 4 char to 3 bytes
     66         for (var i = 0, count = length >> 2 << 2; i < count;) {
     67             v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     68             v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     69             v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     70             v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     71             bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
     72             bytes[index++] = (v2 << 4 | v3 >>> 2) & 255;
     73             bytes[index++] = (v3 << 6 | v4) & 255;
     74         }
     75 
     76         // remain bytes
     77         var remain = length - count;
     78         if (remain === 2) {
     79             v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     80             v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     81             bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
     82         } else if (remain === 3) {
     83             v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     84             v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     85             v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
     86             bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
     87             bytes[index++] = (v2 << 4 | v3 >>> 2) & 255;
     88         }
     89         return bytes;
     90     };
     91 
     92     var encodeFromBytes = function (bytes) {
     93         var v1, v2, v3, base64Str = '', length = bytes.length;
     94         for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
     95             v1 = bytes[i++];
     96             v2 = bytes[i++];
     97             v3 = bytes[i++];
     98             base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
     99                 BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    100                 BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
    101                 BASE64_ENCODE_CHAR[v3 & 63];
    102         }
    103 
    104         // remain char
    105         var remain = length - count;
    106         if (remain === 1) {
    107             v1 = bytes[i];
    108             base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    109                 BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
    110                 '==';
    111         } else if (remain === 2) {
    112             v1 = bytes[i++];
    113             v2 = bytes[i];
    114             base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    115                 BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    116                 BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
    117                 '=';
    118         }
    119         return base64Str;
    120     };
    121 
    122     var btoa = root.btoa, atob = root.atob, utf8Base64Encode, utf8Base64Decode;
    123     if (NODE_JS) {
    124         var Buffer = require('buffer').Buffer;
    125         btoa = function (str) {
    126             return new Buffer(str, 'ascii').toString('base64');
    127         };
    128 
    129         utf8Base64Encode = function (str) {
    130             return new Buffer(str).toString('base64');
    131         };
    132 
    133         encodeFromBytes = utf8Base64Encode;
    134 
    135         atob = function (base64Str) {
    136             return new Buffer(base64Str, 'base64').toString('ascii');
    137         };
    138 
    139         utf8Base64Decode = function (base64Str) {
    140             return new Buffer(base64Str, 'base64').toString();
    141         };
    142     } else if (!btoa) {
    143         btoa = function (str) {
    144             var v1, v2, v3, base64Str = '', length = str.length;
    145             for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
    146                 v1 = str.charCodeAt(i++);
    147                 v2 = str.charCodeAt(i++);
    148                 v3 = str.charCodeAt(i++);
    149                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    150                     BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    151                     BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
    152                     BASE64_ENCODE_CHAR[v3 & 63];
    153             }
    154 
    155             // remain char
    156             var remain = length - count;
    157             if (remain === 1) {
    158                 v1 = str.charCodeAt(i);
    159                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    160                     BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
    161                     '==';
    162             } else if (remain === 2) {
    163                 v1 = str.charCodeAt(i++);
    164                 v2 = str.charCodeAt(i);
    165                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    166                     BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    167                     BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
    168                     '=';
    169             }
    170             return base64Str;
    171         };
    172 
    173         utf8Base64Encode = function (str) {
    174             var v1, v2, v3, base64Str = '', bytes = utf8ToBytes(str), length = bytes.length;
    175             for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
    176                 v1 = bytes[i++];
    177                 v2 = bytes[i++];
    178                 v3 = bytes[i++];
    179                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    180                     BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    181                     BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
    182                     BASE64_ENCODE_CHAR[v3 & 63];
    183             }
    184 
    185             // remain char
    186             var remain = length - count;
    187             if (remain === 1) {
    188                 v1 = bytes[i];
    189                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    190                     BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
    191                     '==';
    192             } else if (remain === 2) {
    193                 v1 = bytes[i++];
    194                 v2 = bytes[i];
    195                 base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
    196                     BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
    197                     BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
    198                     '=';
    199             }
    200             return base64Str;
    201         };
    202 
    203         atob = function (base64Str) {
    204             var v1, v2, v3, v4, str = '', length = base64Str.length;
    205             if (base64Str.charAt(length - 2) === '=') {
    206                 length -= 2;
    207             } else if (base64Str.charAt(length - 1) === '=') {
    208                 length -= 1;
    209             }
    210 
    211             // 4 char to 3 bytes
    212             for (var i = 0, count = length >> 2 << 2; i < count;) {
    213                 v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    214                 v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    215                 v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    216                 v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    217                 str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) +
    218                     String.fromCharCode((v2 << 4 | v3 >>> 2) & 255) +
    219                     String.fromCharCode((v3 << 6 | v4) & 255);
    220             }
    221 
    222             // remain bytes
    223             var remain = length - count;
    224             if (remain === 2) {
    225                 v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    226                 v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    227                 str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255);
    228             } else if (remain === 3) {
    229                 v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    230                 v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    231                 v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
    232                 str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) +
    233                     String.fromCharCode((v2 << 4 | v3 >>> 2) & 255);
    234             }
    235             return str;
    236         };
    237 
    238         utf8Base64Decode = function (base64Str) {
    239             var str = '', bytes = decodeAsBytes(base64Str), length = bytes.length;
    240             var i = 0, followingChars = 0, b, c;
    241             while (i < length) {
    242                 b = bytes[i++];
    243                 if (b <= 0x7F) {
    244                     str += String.fromCharCode(b);
    245                     continue;
    246                 } else if (b > 0xBF && b <= 0xDF) {
    247                     c = b & 0x1F;
    248                     followingChars = 1;
    249                 } else if (b <= 0xEF) {
    250                     c = b & 0x0F;
    251                     followingChars = 2;
    252                 } else if (b <= 0xF7) {
    253                     c = b & 0x07;
    254                     followingChars = 3;
    255                 } else {
    256                     throw 'not a UTF-8 string';
    257                 }
    258 
    259                 for (var j = 0; j < followingChars; ++j) {
    260                     b = bytes[i++];
    261                     if (b < 0x80 || b > 0xBF) {
    262                         throw 'not a UTF-8 string';
    263                     }
    264                     c <<= 6;
    265                     c += b & 0x3F;
    266                 }
    267                 if (c >= 0xD800 && c <= 0xDFFF) {
    268                     throw 'not a UTF-8 string';
    269                 }
    270                 if (c > 0x10FFFF) {
    271                     throw 'not a UTF-8 string';
    272                 }
    273 
    274                 if (c <= 0xFFFF) {
    275                     str += String.fromCharCode(c);
    276                 } else {
    277                     c -= 0x10000;
    278                     str += String.fromCharCode((c >> 10) + 0xD800);
    279                     str += String.fromCharCode((c & 0x3FF) + 0xDC00);
    280                 }
    281             }
    282             return str;
    283         };
    284     } else {
    285         utf8Base64Encode = function (str) {
    286             var result = '';
    287             for (var i = 0; i < str.length; i++) {
    288                 var charcode = str.charCodeAt(i);
    289                 if (charcode < 0x80) {
    290                     result += String.fromCharCode(charcode);
    291                 } else if (charcode < 0x800) {
    292                     result += String.fromCharCode(0xc0 | (charcode >> 6)) +
    293                         String.fromCharCode(0x80 | (charcode & 0x3f));
    294                 } else if (charcode < 0xd800 || charcode >= 0xe000) {
    295                     result += String.fromCharCode(0xe0 | (charcode >> 12)) +
    296                         String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) +
    297                         String.fromCharCode(0x80 | (charcode & 0x3f));
    298                 } else {
    299                     charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
    300                     result += String.fromCharCode(0xf0 | (charcode >> 18)) +
    301                         String.fromCharCode(0x80 | ((charcode >> 12) & 0x3f)) +
    302                         String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) +
    303                         String.fromCharCode(0x80 | (charcode & 0x3f));
    304                 }
    305             }
    306             return btoa(result);
    307         };
    308 
    309         utf8Base64Decode = function (base64Str) {
    310             var tmpStr = atob(base64Str.trim('=').replace(/-/g, '+').replace(/_/g, '/'));
    311             if (!/[^x00-x7F]/.test(tmpStr)) {
    312                 return tmpStr;
    313             }
    314             var str = '', i = 0, length = tmpStr.length, followingChars = 0, b, c;
    315             while (i < length) {
    316                 b = tmpStr.charCodeAt(i++);
    317                 if (b <= 0x7F) {
    318                     str += String.fromCharCode(b);
    319                     continue;
    320                 } else if (b > 0xBF && b <= 0xDF) {
    321                     c = b & 0x1F;
    322                     followingChars = 1;
    323                 } else if (b <= 0xEF) {
    324                     c = b & 0x0F;
    325                     followingChars = 2;
    326                 } else if (b <= 0xF7) {
    327                     c = b & 0x07;
    328                     followingChars = 3;
    329                 } else {
    330                     throw 'not a UTF-8 string';
    331                 }
    332 
    333                 for (var j = 0; j < followingChars; ++j) {
    334                     b = tmpStr.charCodeAt(i++);
    335                     if (b < 0x80 || b > 0xBF) {
    336                         throw 'not a UTF-8 string';
    337                     }
    338                     c <<= 6;
    339                     c += b & 0x3F;
    340                 }
    341                 if (c >= 0xD800 && c <= 0xDFFF) {
    342                     throw 'not a UTF-8 string';
    343                 }
    344                 if (c > 0x10FFFF) {
    345                     throw 'not a UTF-8 string';
    346                 }
    347 
    348                 if (c <= 0xFFFF) {
    349                     str += String.fromCharCode(c);
    350                 } else {
    351                     c -= 0x10000;
    352                     str += String.fromCharCode((c >> 10) + 0xD800);
    353                     str += String.fromCharCode((c & 0x3FF) + 0xDC00);
    354                 }
    355             }
    356             return str;
    357         };
    358     }
    359 
    360     var encode = function (str, asciiOnly) {
    361         var notString = typeof(str) != 'string';
    362         if (notString && str.constructor === root.ArrayBuffer) {
    363             str = new Uint8Array(str);
    364         }
    365         if (notString) {
    366             return encodeFromBytes(str);
    367         } else {
    368             if (!asciiOnly && /[^x00-x7F]/.test(str)) {
    369                 return utf8Base64Encode(str);
    370             } else {
    371                 return btoa(str);
    372             }
    373         }
    374     };
    375 
    376     var decode = function (base64Str, asciiOnly) {
    377         return asciiOnly ? atob(base64Str) : utf8Base64Decode(base64Str);
    378     };
    379 
    380     var exports = {
    381         encode: encode,
    382         decode: decode,
    383         atob: atob,
    384         btoa: btoa
    385     };
    386     decode.bytes = decodeAsBytes;
    387     decode.string = decode;
    388 
    389     if (COMMON_JS) {
    390         module.exports = exports;
    391     } else {
    392         root.base64 = exports;
    393         if(AMD) {
    394             define(function() {
    395                 return exports;
    396             });
    397         }
    398     }
    399 })();
  • 相关阅读:
    哈希算法(Hash Algorithm)初探
    一本计划中的WPF图书目录
    php中关于mysqli和mysql区别的一些知识点整理
    PHP Plurk Api基�教�(一)
    Wordpress 去除重复评论限制
    [share]PDO操作MySql类
    PHP处理文件(转载)
    PHP 取得某天前后N天的日期
    源码搭建LAMP服务器
    PHP ��/日期操作��
  • 原文地址:https://www.cnblogs.com/zzc666/p/12523262.html
Copyright © 2011-2022 走看看