• base64


    base64是很基本的加密算法,常用于邮件和迅雷的下载地址,下面是js版的算法代码和网页示例

    编码:

    //分割成每6位,最大是111111,即63,所以共需要64个字符
    var base64EncodeChars = [
        "A", "B", "C", "D", "E", "F", "G", "H",
        "I", "J", "K", "L", "M", "N", "O", "P",
        "Q", "R", "S", "T", "U", "V", "W", "X",
        "Y", "Z", "a", "b", "c", "d", "e", "f",
        "g", "h", "i", "j", "k", "l", "m", "n",
        "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "0", "1", "2", "3",
        "4", "5", "6", "7", "8", "9", "+", "/"
    ];

    function base64encode(str) {
        var out, i, j, len;
        var c1, c2, c3;//读取待加密的三个字符

        len = str.length;
        i = j = 0;
        out = [];
        while (i < len) {
            c1 = str.charCodeAt(i++) & 0xff;
            if (i == len)//最后一组只有一个字符
            {
                out[j++] = base64EncodeChars[c1 >> 2];
                out[j++] = base64EncodeChars[(c1 & 0x3) << 4];
                out[j++] = "==";
                break;
            }
            c2 = str.charCodeAt(i++) & 0xff;
            if (i == len)最后一组只有俩字符
            {
                out[j++] = base64EncodeChars[c1 >> 2];
                out[j++] = base64EncodeChars[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)];
                out[j++] = base64EncodeChars[(c2 & 0x0f) << 2];
                out[j++] = "=";
                break;
            }
            c3 = str.charCodeAt(i++) & 0xff;
            out[j++] = base64EncodeChars[c1 >> 2];//右移2位,即取高6位,8-2=6,唔识翻去读小学
            out[j++] = base64EncodeChars[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)];
            //c1 & 0x03是高6位置0留下低2位,再左移4位变成高5,6位,再用逻辑或与c2的高四位合并,即c2
              的高4位充当第二个已加密字符的低四位
            out[j++] = base64EncodeChars[((c2 & 0x0f) << 2) | ((c3 & 0xc0) >> 6)];
                   //c2的低4位与c3高2位合并
            out[j++] = base64EncodeChars[c3 & 0x3f];
             //高2位置0
        //我是在解释代码还是在讲数学呢?????
        }
        return out.join('');
    }

    解码:

    //11111111=127,所以要128个字符,但密文是由64种字符组成的(好似咩!@¥%*^哩d咯,都唔系密文就无所谓解密啦),所以不是base64加密的记作-1,并且无法解密
    var base64DecodeChars = [
        -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, j, len, out;

        len = str.length;
        i = j = 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[j++] = String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));//解开第一个

            /* c3 */
            do {
                c3 = str.charCodeAt(i++) & 0xff;
                if (c3 == 61) return out.join('');
                c3 = base64DecodeChars[c3];
            } while (i < len && c3 == -1);
            if (c3 == -1) break;

            out[j++] = String.fromCharCode(((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2));//解开第二个

            /* c4 */
            do {
                c4 = str.charCodeAt(i++) & 0xff;
                if (c4 == 61) return out.join('');
                c4 = base64DecodeChars[c4];
            } while (i < len && c4 == -1);
            if (c4 == -1) break;
            out[j++] = String.fromCharCode(((c3 & 0x03) << 6) | c4);//解开第三个
        }
        return out.join('');
    }

    base64编码加密

    原码


    base64 encode


    base64 decode


  • 相关阅读:
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车按键启动和蜂鸣器报警
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    asp中设置session过期时间方法总结
    asp中设置session过期时间方法总结
    ASP.NET关于Session_End触发与否的问题
  • 原文地址:https://www.cnblogs.com/encode/p/2683675.html
Copyright © 2020-2023  润新知