一些简单的JavaScript加密/解密

UTF8编码与解码:

    function encodeUTF8(str){
        var temp = "",rs = "";
        for( var i=0 , len = str.length; i < len; i++ ){
            temp = str.charCodeAt(i).toString(16);
            rs  += "\\u"+ new Array(5-temp.length).join("0") + temp;
        }
        return rs;
    }
    function decodeUTF8(str){
        return str.replace(/(\\u)(\w{4}|\w{2})/gi, function($0,$1,$2){
            return String.fromCharCode(parseInt($2,16));
        });
    }
    console.log(encodeUTF8("123olp=-+*/中国"));
    console.log(decodeUTF8(encodeUTF8("123olp=-+*/中国")));

结果:
\u0031\u0032\u0033\u006f\u006c\u0070\u003d\u002d\u002b\u002a\u002f\u4e2d\u56fd
123olp=-+*/中国

字符串转16进制

//(只能是英文数字,不能是汉字等,编码出来乱码)
 function strToHexCharCode(str) {
        if(str === "")
            return "";
        var hexCharCode = [];
        hexCharCode.push("0x");
        for(var i = 0; i < str.length; i++) {
            hexCharCode.push((str.charCodeAt(i)).toString(16));
        }
        return hexCharCode.join("");
    }
    console.log(strToHexCharCode("ss11*-+中国人民"));
    //16进制转字符串

    function hexCharCodeToStr(hexCharCodeStr) {
        var trimedStr = hexCharCodeStr.trim();
        var rawStr = trimedStr.substr(0,2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
        var len = rawStr.length;
        if(len % 2 !== 0) {
            alert("Illegal Format ASCII Code!");
            return "";
        }
        var curCharCode;
        var resultStr = [];
        for(var i = 0; i < len;i = i + 2) {
            curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
            resultStr.push(String.fromCharCode(curCharCode));
        }
        return resultStr.join("");
    }
    console.log(hexCharCodeToStr(strToHexCharCode("ss11*-+中国人民")));

结果:
0x737331312a2d2b4e2d56fd4eba6c11
ss11*-+N-VýNºl

ASCII与Base64转换

    let encodedData = window.btoa("ss11*-+999"); // 编码//ascii->base64  //(只能是英文数字,不能是汉字等,如果是汉字就报错)
    let decodedData = window.atob(encodedData); // 解码//base64->ascii
        console.log(encodedData);
        console.log(decodedData);

结果:
c3MxMSotKzk5OQ==
ss11*-+999

利用escape()函数

    //escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
    // 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
    //也就是说不能编码网址等
    var b=escape("中国人112ppp*-/++-`www.baidu.com");
    console.log(b);
    console.log(unescape(b));

结果:
%u4E2D%u56FD%u4EBA112ppp*-/++-%60www.baidu.com
中国人112ppp*-/++-`www.baidu.com

简单的加密解密的函数

function compile(code) {
        var c=String.fromCharCode(code.charCodeAt(0)+code.length);
        for(var i=1;i<code.length;i++){
            c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
        }
        return(escape(c));
    }
    function uncompile(code) {
        code=unescape(code);
        var c=String.fromCharCode(code.charCodeAt(0)-code.length);
        for(var i=1;i<code.length;i++){
            c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
        }
        return c;
    }
    console.log(compile("ji45+-*积极"));
    console.log((uncompile(compile("ji45+-*积极"))));

结果:
s%D3%9Di%60XW%u7A19%uE170
ji45+-*积极


这里是结合上面的函数例子,简单些的一个加密函数,先用charCodeAt()方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数,将传入的值转为字符串,然后用escape函数进行加密。解密使用的是unescape。然后再用String.fromCharCode(numX,numX,...,numX)方法(可接受一个指定的 Unicode 值,然后返回一个字符串。)解密。
下载链接自己的加密解密函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值