enc-framework
Version:
enc-framework 核心组件.
143 lines (120 loc) • 3.43 kB
JavaScript
//base64工具类
const base64Utils = {
base64hash : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
//加密
_btoa : function(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) {
// 第一个6位只需要让8位二进制右移两位
case 0:
result.push(this.base64hash.charAt(ascii >> 2));
break;
//第二个6位 = 第一个8位的后两位 + 第二个8位的前4位
case 1:
result.push(this.base64hash.charAt((prev & 3) << 4 | (ascii >> 4)));
break;
//第三个6位 = 第二个8位的后4位 + 第三个8位的前2位
//第4个6位 = 第三个8位的后6位
case 2:
result.push(this.base64hash.charAt((prev & 0x0f) << 2 | (ascii >> 6)));
result.push(this.base64hash.charAt(ascii & 0x3f));
break;
}
prev = ascii;
i++;
}
// 循环结束后看mod, 为0 证明需补3个6位,第一个为最后一个8位的最后两位后面补4个0。另外两个6位对应的是异常的“=”;
// mod为1,证明还需补两个6位,一个是最后一个8位的后4位补两个0,另一个对应异常的“=”
if (mod == 0) {
result.push(this.base64hash.charAt((prev & 3) << 4));
result.push('==');
} else if (mod == 1) {
result.push(this.base64hash.charAt((prev & 0x0f) << 2));
result.push('=');
}
return result.join('');
},
// atob method
// 逆转encode的思路即可
_atob : function (s){
s = s.replace(/\s|=/g, '');
var cur,
prev,
mod,
i = 0,
result = [];
while (i < s.length) {
cur = this.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('');
}
}
/* 提示工具 */
const tipUtils = {
//提示
tip : function(result){
var type = "success";
var message = result.message;
if (result.status == 500 || !result.data) {
type = "error";
}
/* Message({
message: message,
type: type,
duration: 1500
});*/
},
error: function(message,callback){
/*Message({
message: message,
type: "error",
duration: 1500,
onClose:callback
});*/
},
alert : function(title,message,callback){
/*MessageBox.alert(message, title, {
confirmButtonText: '确定',
callback: callback
});*/
}
}
/* 随机数工具类 */
const randomUtils = {
/* 生成数字*/
nextNumber : function(len){
if(!len || len > 15){
len = 6;
}
var r = Math.random()*10;
return r.toString().substr(0,len);
}
}
export { base64Utils, tipUtils, randomUtils };