javascript window.btoa atob 和 base64加密不通用

javascript window.btoa atob 和 base64加密不通用

var base64hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function btoa(s) {
if (/([^\u0000-\u00ff])/.test(s)) {
throw new Error('INVALID_CHARACTER_ERR');
}
var i = 0,
prev, ascii, mod, result = [];
while (i < s.length) { ascii = s.charCodeAt(i); mod = i % 3; switch (mod) { case 0: result.push(base64hash.charAt(ascii >> 2));
break;
case 1:
result.push(base64hash.charAt((prev & 3) << 4 | (ascii >> 4)));
break;
case 2:
result.push(base64hash.charAt((prev & 0x0f) << 2 | (ascii >> 6)));
result.push(base64hash.charAt(ascii & 0x3f));
break
}
prev = ascii;
i++
}
if (mod == 0) {
result.push(base64hash.charAt((prev & 3) << 4));
result.push('==')
} else if (mod == 1) {
result.push(base64hash.charAt((prev & 0x0f) << 2));
result.push('=')
}
return result.join('')
}

atob 方法

// 逆转encode的思路即可
function _atob(s) {
s = s.replace(/\s|=/g, '');
var cur, prev, mod, i = 0,
result = [];
while (i < s.length) {
    cur = base64hash.indexOf(s.charAt(i));
    mod = i % 4;
    switch (mod) {
    case 0:
        //TODO
        break;
    case 1:
        result.push(String.fromCharCode(prev << 2 | cur >> 4));
        break;
    case 2:
        result.push(String.fromCharCode((prev & 0x0f) << 4 | cur >> 2));
        break;
    case 3:
        result.push(String.fromCharCode((prev & 3) << 6 | cur));
        break;
    }
    prev = cur;
    i++;
}
return result.join('');
}

给TA打赏
共{{data.count}}人
人已打赏
技术技巧数据库

Mongodb 分片 update 条件没有分片键 导致保存失败

2019-12-3 10:14:15

PHP技术技巧

安卓 微信图片/视频 上传PHP服务端 格式 content-type为application/octet-stream

2020-4-3 20:32:10

0 条回复A文章作者M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索