文档章节

jquery.base64.js支持中文

 夏碌冬藏
发布于 2017/04/28 21:51
字数 1094
阅读 47
收藏 0

@阿阮 在https://my.oschina.net/aruan/blog/418980写道支持中文,但是缺少了东西“"use strict";”在测试时,发现有很多关于jquery.base64.js的库,最后发现@阿阮 兄是从https://github.com/carlo/jquery-base64这里修改来的,现在放出可用的源码。

    使用方法:

<html>

<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="javascript" src="js/jquery-1.11.3.min.js"></script>
    <script language="javascript" src="js/jquery.base64.cn.js"></script>
</head>

<body>
    <input id="path" name="path" type="hidden" value="haha"></input>
    <input id="putcardno01" name="putcardno01" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc();" class="btn1" value="提交加密" type="button"></input>
    <br> 加密后:
    <input id="putcardno02" name="putcardno02" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc02();" class="btn1" value="提交解密" type="button"></input>
    <br>
    <br>
    <hr>
    <input onclick="subfunc03();" class="btn1" value="提交N次加密" type="button"></input>
    <br> 加密后:
    <input id="putcardno03" name="putcardno03" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc04();" class="btn1" value="提交N次解密" type="button"></input>
    <br>
    <br>
    <input onclick="clearrr();" class="btn1" value="清除" type="button"></input>
    <br>
    <textarea id='txt' cols="75" rows="19"></textarea>
</body>
<script language="javascript">
var path = document.getElementById("path").value;

function app(info) {
    $("#txt").val($("#txt").val() + '\n' + info);
}



function subfunc() {
    var put1 = $.trim($("#putcardno01").val());
    // var estxt=$.base64.encode(put1);
    //var estxt=$.base64.btoa(put1);

    var estxt = encodeBase64(put1);
    $("#putcardno02").val(estxt);
    app("加密后[" + estxt + "]");
}



function subfunc02() {
    var put1 = $.trim($("#putcardno02").val());
    //var estxt=$.base64.decode(put1);
    //var estxt=$.base64.atob(put1);

    var estxt = decodeBase64(put1);
    app("解密后[" + estxt + "]");
}


//////////////////////////////////////////
var numTimes = 5;

function subfunc03() {
    var put1 = $.trim($("#putcardno01").val());
    // var estxt=$.base64.encode(put1);
    //var estxt=$.base64.btoa(put1);
    //estxt=$.base64.btoa(estxt);

    estxt = encodeBase64(put1, numTimes);

    $("#putcardno03").val(estxt);
    app(numTimes + "次加密后[" + estxt + "]");
}



function subfunc04() {
    var put1 = $.trim($("#putcardno03").val());
    //var estxt=$.base64.decode(put1);
    //var estxt=$.base64.atob(put1);
    //estxt=$.base64.atob(estxt);


    estxt = decodeBase64(put1, numTimes);
    app(numTimes + "次解密后[" + estxt + "]");
}


function clearrr() {
    $("#putcardno02").val("");
    $("#putcardno03").val("");
    $("#putcardno04").val("");
    $("#txt").val("");
}













//加密方法。没有过滤首尾空格,即没有trim.
//加密可以加密N次,对应解密N次就可以获取明文
function encodeBase64(mingwen, times) {
    var code = "";
    var num = 1;
    if (typeof times == 'undefined' || times == null || times == "") {
        num = 1;
    } else {
        var vt = times + "";
        num = parseInt(vt);
    }

    if (typeof mingwen == 'undefined' || mingwen == null || mingwen == "") {

    } else {
        code = mingwen;
        for (var i = 0; i < num; i++) {
            code = $.base64.encode(code);
            // code = $.base64({data:code,type:0});
        }
    }
    return code;
}


//解密方法。没有过滤首尾空格,即没有trim
//加密可以加密N次,对应解密N次就可以获取明文
function decodeBase64(mi, times) {
    var mingwen = "";
    var num = 1;
    if (typeof times == 'undefined' || times == null || times == "") {
        num = 1;
    } else {
        var vt = times + "";
        num = parseInt(vt);
    }


    if (typeof mi == 'undefined' || mi == null || mi == "") {

    } else {
        mingwen = mi;
        for (var i = 0; i < num; i++) {
            mingwen = $.base64.decode(mingwen);
            // mingwen = $.base64({data:mingwen,type:1,unicode:false});
        }
    }
    return mingwen;
}


/*
测试
输入 suolong2014version


加密后[c3VvbG9uZzIwMTR2ZXJzaW9u]
解密后[suolong2014version]
5次加密后[VjFod1QxWXlVblJUYTJoUVYwWmFhRnBYZEhOTk1WSlhWV3hPVG1KSVFscFZNalYzWVVaYU5tSkVSVDA9]
5次解密后[suolong2014version]
*/
</script>

    源码:

//支持中文的jquery.base64.js插件
"use strict";
jQuery.base64 = (function($) {

    var _PADCHAR = "=",
        _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
        _VERSION = "1.1"; //Mr. Ruan fix to 1.1 to support asian char(utf8)


    function _getbyte64(s, i) {
        // This is oddly fast, except on Chrome/V8.
        // Minimal or no improvement in performance by using a
        // object with properties mapping chars to value (eg. 'A': 0)

        var idx = _ALPHA.indexOf(s.charAt(i));

        if (idx === -1) {
            throw "Cannot decode base64";
        }

        return idx;
    }

    function _decode_chars(y, x) {
        while (y.length > 0) {
            var ch = y[0];
            if (ch < 0x80) {
                y.shift();
                x.push(String.fromCharCode(ch));
            } else if ((ch & 0x80) == 0xc0) {
                if (y.length < 2) break;
                ch = y.shift();
                var ch1 = y.shift();
                x.push(String.fromCharCode(((ch & 0x1f) << 6) + (ch1 & 0x3f)));
            } else {
                if (y.length < 3) break;
                ch = y.shift();
                var ch1 = y.shift();
                var ch2 = y.shift();
                x.push(String.fromCharCode(((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f)));
            }
        }
    }

    function _decode(s) {
        var pads = 0,
            i,
            b10,
            imax = s.length,
            x = [],
            y = [];

        s = String(s);

        if (imax === 0) {
            return s;
        }

        if (imax % 4 !== 0) {
            throw "Cannot decode base64";
        }

        if (s.charAt(imax - 1) === _PADCHAR) {
            pads = 1;

            if (s.charAt(imax - 2) === _PADCHAR) {
                pads = 2;
            }

            // either way, we want to ignore this last block
            imax -= 4;
        }

        for (i = 0; i < imax; i += 4) {
            var ch1 = _getbyte64(s, i);
            var ch2 = _getbyte64(s, i + 1);
            var ch3 = _getbyte64(s, i + 2);
            var ch4 = _getbyte64(s, i + 3);

            b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6) | _getbyte64(s, i + 3);
            y.push(b10 >> 16);
            y.push((b10 >> 8) & 0xff);
            y.push(b10 & 0xff);
            _decode_chars(y, x);
        }
        switch (pads) {
            case 1:
                b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6);
                y.push(b10 >> 16);
                y.push((b10 >> 8) & 0xff);
                break;

            case 2:
                b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12);
                y.push(b10 >> 16);
                break;
        }
        _decode_chars(y, x);
        if (y.length > 0) throw "Cannot decode base64";
        return x.join("");
    }


    function _get_chars(ch, y) {
        if (ch < 0x80) y.push(ch);
        else if (ch < 0x800) {
            y.push(0xc0 + ((ch >> 6) & 0x1f));
            y.push(0x80 + (ch & 0x3f));
        } else {
            y.push(0xe0 + ((ch >> 12) & 0xf));
            y.push(0x80 + ((ch >> 6) & 0x3f));
            y.push(0x80 + (ch & 0x3f));
        }
    }



    function _encode(s) {
        if (arguments.length !== 1) {
            throw "SyntaxError: exactly one argument required";
        }

        s = String(s);
        if (s.length === 0) {
            return s;
        }

        //s = _encode_utf8(s);
        var i,
            b10,
            y = [],
            x = [],
            len = s.length;
        i = 0;
        while (i < len) {
            _get_chars(s.charCodeAt(i), y);
            while (y.length >= 3) {
                var ch1 = y.shift();
                var ch2 = y.shift();
                var ch3 = y.shift();
                b10 = (ch1 << 16) | (ch2 << 8) | ch3;
                x.push(_ALPHA.charAt(b10 >> 18));
                x.push(_ALPHA.charAt((b10 >> 12) & 0x3F));
                x.push(_ALPHA.charAt((b10 >> 6) & 0x3f));
                x.push(_ALPHA.charAt(b10 & 0x3f));
            }
            i++;
        }


        switch (y.length) {
            case 1:
                var ch = y.shift();
                b10 = ch << 16;
                x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _PADCHAR + _PADCHAR);
                break;

            case 2:
                var ch1 = y.shift();
                var ch2 = y.shift();
                b10 = (ch1 << 16) | (ch2 << 8);
                x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _ALPHA.charAt((b10 >> 6) & 0x3f) + _PADCHAR);
                break;
        }

        return x.join("");
    }


    return {
        decode: _decode,
        encode: _encode,
        VERSION: _VERSION
    };
}(jQuery));

 

 

© 著作权归作者所有

共有 人打赏支持
粉丝 8
博文 49
码字总数 12155
作品 0
赣州
后端工程师
jquery.base64.js的修正

深圳一朋友说使用jquery.base64.js时发现对于中文直接抛出异常,作者压根不处理汉字的情况,因此 对其进行修正,关键函数为: function decodechars(y, x){ while(y.length > 0){ var ch = ...

阿阮
2015/05/23
0
9
Collabtive 0.76 中文修复版首发下载

Collabtive 0.76 中文修复版,修复4个问题: install.php里的SQL语句创建表不支持中文,数据库记录显示中文乱码; 项目文件管理的中文汉化、语言配置文件遗留问题; 不支持创建中文目录和上传...

庞罗均
2012/07/03
0
0
Google 云输入法登陆 Google Translate

去年年底 Google Transliterate 开始支持简体中文,今年三月其 API 再次更新,支持了使用 Bookmarklet 在任何网页中使用谷歌云输入法输入中文。而今天,谷歌输入法团队将中文的云输入法引入了...

老枪
2011/05/19
1K
7
Hyperic HQ简体中文汉化包完整版

Hyperic HQ简体中文汉化包完整版: 区别于Hyperic HQ 中文汉化包基础版,Hyepric HQ 中文汉化包完整版的特性包括: 全面的 ApplicationResource.properties汉化 全部的 JSP汉化 Hyperic HQ 中...

liuyifeng
2011/03/16
2.8K
3
谷歌翻译开始支持中文发音

谷歌翻译(Google Translate)尽管很早就支持了中文语言,而且也有了翻译结果发音功能,但是一直没有中文的发音支持,不得不说是一个遗憾。而如今谷歌的这个缺陷也 终于得到了弥补。目前根据...

红薯
2010/05/12
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
19分钟前
1
1
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
29分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
30分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
38分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部