gy-webcode2 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/bar.vue +37 -0
- package/components/breadcrumb.vue +127 -0
- package/components/javaEditor.vue +88 -0
- package/components/sqlEditor.vue +92 -0
- package/components/waterfall.vue +484 -0
- package/css/common.scss +106 -0
- package/css/layout.scss +338 -0
- package/css/login.scss +122 -0
- package/css/modules/button.scss +2 -0
- package/css/modules/color.scss +58 -0
- package/css/modules/common.scss +217 -0
- package/css/modules/elementUI.scss +426 -0
- package/css/modules/form.scss +56 -0
- package/css/modules/header.scss +342 -0
- package/css/modules/sidebar.scss +214 -0
- package/css/modules/table.scss +134 -0
- package/css/modules/tabs.scss +54 -0
- package/css/modules/tags.scss +149 -0
- package/css/modules/tree.scss +120 -0
- package/css/modules/tree_check.scss +53 -0
- package/css/theme/colors/cheng.scss +17 -0
- package/css/theme/colors/default.scss +19 -0
- package/css/theme/colors/hong.scss +17 -0
- package/css/theme/colors/huang.scss +17 -0
- package/css/theme/colors/lv.scss +17 -0
- package/css/theme/colors/qing.scss +17 -0
- package/css/theme/colors/shenaln.scss +17 -0
- package/css/theme/colors/zi.scss +18 -0
- package/css/theme/global.scss +8 -0
- package/css/theme/styles/default.scss +11 -0
- package/css/theme/styles/hailan.scss +11 -0
- package/css/theme/styles/shenlan.scss +11 -0
- package/css/theme/theme.scss +78 -0
- package/extend/axios.js +173 -0
- package/extend/formatTime.js +54 -0
- package/img/btnActive/1.png +0 -0
- package/img/btnActive/2.png +0 -0
- package/img/btnActive/3.png +0 -0
- package/img/btnActive/4.png +0 -0
- package/img/btnActive/5.png +0 -0
- package/img/btnActive/6.png +0 -0
- package/img/btnActive/7.png +0 -0
- package/img/btnActive/8.png +0 -0
- package/img/login_bg.jpg +0 -0
- package/img/login_bg2.jpg +0 -0
- package/img/login_bg2.png +0 -0
- package/img/mrtx.jpg +0 -0
- package/img/slogan.png +0 -0
- package/img/theme/pageStyle_1.png +0 -0
- package/img/theme/pageStyle_2.png +0 -0
- package/img/theme/pageStyle_3.png +0 -0
- package/index.js +17 -0
- package/jsconfig.json +19 -0
- package/package.json +15 -0
- package/plugins/jsencrypt.js +5370 -0
- package/plugins/jsencrypt.min.js +1 -0
- package/plugins/swiper-4.5.3/css/swiper.css +619 -0
- package/plugins/swiper-4.5.3/css/swiper.min.css +12 -0
- package/plugins/swiper-4.5.3/js/swiper.esm.bundle.js +7184 -0
- package/plugins/swiper-4.5.3/js/swiper.esm.js +7166 -0
- package/plugins/swiper-4.5.3/js/swiper.js +8149 -0
- package/plugins/swiper-4.5.3/js/swiper.min.js +13 -0
- package/plugins/swiper-4.5.3/js/swiper.min.js.map +1 -0
- package/scripts/$u.mixin.js +27 -0
- package/scripts/crypto.js +184 -0
- package/scripts/jsencrypt.js +180 -0
- package/scripts/md5.js +259 -0
- package/scripts/numberAnimate.js +134 -0
- package/scripts/uuid.js +33 -0
- package/updateLog.txt +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { mapState } from 'vuex'
|
|
2
|
+
import store from "@/store"
|
|
3
|
+
|
|
4
|
+
// 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
|
|
5
|
+
let $uStoreKey = [];
|
|
6
|
+
try{
|
|
7
|
+
$uStoreKey = store.state ? Object.keys(store.state) : [];
|
|
8
|
+
}catch(e){
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
beforeCreate() {
|
|
14
|
+
// 将vuex方法挂在到$u中
|
|
15
|
+
// 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
|
|
16
|
+
// 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
|
|
17
|
+
this.$vuex = (name, value) => {
|
|
18
|
+
this.$store.commit('$uStore', {
|
|
19
|
+
name,value
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
computed: {
|
|
24
|
+
// 将vuex的state中的所有变量,解构到全局混入的mixin中
|
|
25
|
+
...mapState($uStoreKey)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import CryptoJS from "crypto-js";
|
|
2
|
+
import JSEncrypt from "./jsencrypt"
|
|
3
|
+
|
|
4
|
+
let publicKey = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHc63H8xcxLRfImQFsa+x1ANC7vIX7GAKAXvz1EE76OWLY0DLc4rlo6wedOu+HzaDSsSTwDCHr8Gi2SXg4DNwyJY12vNK4ZpptHj6BrYqOhxJmExmxMLuyyzAxMiaBWYmGJhHPb1xHoOYaSGd4JkVEfdmkkg5OeqH1ZFhzmK5VIQIDAQAB`
|
|
5
|
+
let privateKey = '这里是封装的私钥'
|
|
6
|
+
|
|
7
|
+
const sha256 = (data) => {
|
|
8
|
+
return CryptoJS.SHA256(data).toString();
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const crypto = {
|
|
12
|
+
// 数据加密
|
|
13
|
+
encrypt(val) {
|
|
14
|
+
var key = CryptoJS.enc.Utf8.parse(window._zgy.aESKey);
|
|
15
|
+
let encrypted = CryptoJS.AES.encrypt(val, key,
|
|
16
|
+
{
|
|
17
|
+
mode: CryptoJS.mode.ECB,
|
|
18
|
+
padding: CryptoJS.pad.ZeroPadding
|
|
19
|
+
});
|
|
20
|
+
return encrypted.toString();
|
|
21
|
+
},
|
|
22
|
+
// 数据解密
|
|
23
|
+
decrypt(val) {
|
|
24
|
+
var key = CryptoJS.enc.Utf8.parse(window._zgy.aESKey);
|
|
25
|
+
let decrypted = CryptoJS.AES.decrypt(val, key,
|
|
26
|
+
{
|
|
27
|
+
mode: CryptoJS.mode.ECB,
|
|
28
|
+
padding: CryptoJS.pad.ZeroPadding
|
|
29
|
+
});
|
|
30
|
+
return decrypted.toString(CryptoJS.enc.Utf8);
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 生成随机字符串
|
|
35
|
+
* @param len 指定长度
|
|
36
|
+
*/
|
|
37
|
+
randomString(len) {
|
|
38
|
+
len = len || 32;
|
|
39
|
+
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
|
|
40
|
+
let maxPos = $chars.length;
|
|
41
|
+
let pwd = '';
|
|
42
|
+
for (let i = 0; i < len; i++) {
|
|
43
|
+
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
|
|
44
|
+
}
|
|
45
|
+
return pwd;
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 从1970年开始的毫秒数然后截取10位变成 从1970年开始的秒数
|
|
50
|
+
* @return 返回10位时间戳
|
|
51
|
+
*/
|
|
52
|
+
timestamp() {
|
|
53
|
+
// new Date().getTime();
|
|
54
|
+
let tmp = Date.parse(new Date()).toString();
|
|
55
|
+
tmp = tmp.substr(0, 10);
|
|
56
|
+
return tmp;
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 签名
|
|
61
|
+
* @param token 身份令牌
|
|
62
|
+
* @param timestamp 签名时间戳
|
|
63
|
+
* @param data 签名数据
|
|
64
|
+
* @param key 签名key
|
|
65
|
+
* @param nonce 随机字符串
|
|
66
|
+
*/
|
|
67
|
+
sign(token, timestamp, data, key, nonce) {
|
|
68
|
+
let ret = [];
|
|
69
|
+
let json = {};
|
|
70
|
+
if(!data || Array.isArray(data)){
|
|
71
|
+
ret = [];
|
|
72
|
+
}else if(data.constructor.name == "URLSearchParams"){
|
|
73
|
+
data.forEach((a,b)=>{
|
|
74
|
+
if(a != null){
|
|
75
|
+
ret.push(b);
|
|
76
|
+
json[b] = a;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}else{
|
|
80
|
+
for (let it in data) {
|
|
81
|
+
let val = data[it];
|
|
82
|
+
if(data[it] != null){
|
|
83
|
+
json[it] = val;
|
|
84
|
+
if (typeof val === 'object') {
|
|
85
|
+
json[it] = '';
|
|
86
|
+
}
|
|
87
|
+
ret.push(it);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 字典升序
|
|
92
|
+
ret.sort();
|
|
93
|
+
var parstring = [];
|
|
94
|
+
ret.forEach((a,b)=>{
|
|
95
|
+
parstring.push(a+json[a])
|
|
96
|
+
});
|
|
97
|
+
let signsrc = parstring.join('') + token + timestamp + nonce;
|
|
98
|
+
return sha256(signsrc).toUpperCase();
|
|
99
|
+
},
|
|
100
|
+
//key加密
|
|
101
|
+
RSAencrypt(pas,key) {
|
|
102
|
+
if(!pas){
|
|
103
|
+
return "";
|
|
104
|
+
}
|
|
105
|
+
let encryptStr = new JSEncrypt();
|
|
106
|
+
encryptStr.setPublicKey(key);
|
|
107
|
+
return encryptStr.encryptLong2(pas.toString());
|
|
108
|
+
},
|
|
109
|
+
//key解密
|
|
110
|
+
RSAdecrypt(pas,key) {
|
|
111
|
+
let jse = new JSEncrypt();
|
|
112
|
+
// 私钥
|
|
113
|
+
jse.setPrivateKey(key)
|
|
114
|
+
// console.log('解密:'+jse.decrypt(pas))
|
|
115
|
+
return jse.decryptLong2(pas);
|
|
116
|
+
|
|
117
|
+
// let jse = new JSEncrypt();
|
|
118
|
+
// // 私钥
|
|
119
|
+
// jse.setPrivateKey(key)
|
|
120
|
+
// // console.log('解密:'+jse.decrypt(pas))
|
|
121
|
+
// return jse.decrypt(pas);
|
|
122
|
+
|
|
123
|
+
},
|
|
124
|
+
//生成公私钥
|
|
125
|
+
getRsaKeys(func){
|
|
126
|
+
window.crypto.subtle.generateKey(
|
|
127
|
+
{
|
|
128
|
+
name: "RSA-OAEP",
|
|
129
|
+
modulusLength: 1024, //can be 1024, 2048, or 4096
|
|
130
|
+
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
|
|
131
|
+
hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
|
|
132
|
+
},
|
|
133
|
+
true, //whether the key is extractable (i.e. can be used in exportKey)
|
|
134
|
+
["encrypt", "decrypt"] //must be ["encrypt", "decrypt"] or ["wrapKey", "unwrapKey"]
|
|
135
|
+
).then(function(key){
|
|
136
|
+
window.crypto.subtle.exportKey(
|
|
137
|
+
"pkcs8",
|
|
138
|
+
key.privateKey
|
|
139
|
+
).then(function(keydata1){
|
|
140
|
+
window.crypto.subtle.exportKey(
|
|
141
|
+
"spki",
|
|
142
|
+
key.publicKey
|
|
143
|
+
).then(function(keydata2){
|
|
144
|
+
var privateKey = crypto.RSA2text(keydata1,1);
|
|
145
|
+
var publicKey = crypto.RSA2text(keydata2);
|
|
146
|
+
func(privateKey,publicKey);
|
|
147
|
+
}).catch(function(err){
|
|
148
|
+
console.error(err);
|
|
149
|
+
});
|
|
150
|
+
})
|
|
151
|
+
.catch(function(err){
|
|
152
|
+
console.error(err);
|
|
153
|
+
});
|
|
154
|
+
})
|
|
155
|
+
.catch(function(err){
|
|
156
|
+
console.error(err);
|
|
157
|
+
});
|
|
158
|
+
},
|
|
159
|
+
RSA2text(buffer,isPrivate=0) {
|
|
160
|
+
var binary = '';
|
|
161
|
+
var bytes = new Uint8Array(buffer);
|
|
162
|
+
var len = bytes.byteLength;
|
|
163
|
+
for (var i = 0; i < len; i++) {
|
|
164
|
+
binary += String.fromCharCode(bytes[i]);
|
|
165
|
+
}
|
|
166
|
+
var base64 = window.btoa(binary);
|
|
167
|
+
if(isPrivate == 1){
|
|
168
|
+
|
|
169
|
+
// var text = "-----BEGIN "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----\n";
|
|
170
|
+
var text = base64.replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{64}\x01?/g,"$&\n");
|
|
171
|
+
// text += "\n-----END "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----";
|
|
172
|
+
}
|
|
173
|
+
else{
|
|
174
|
+
// var text = "-----BEGIN "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----\n";
|
|
175
|
+
var text = base64
|
|
176
|
+
// .replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{64}\x01?/g,"$&\n");
|
|
177
|
+
// text += "\n-----END "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----";
|
|
178
|
+
}
|
|
179
|
+
return text;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
export default crypto;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
2
|
+
var b64pad="=";
|
|
3
|
+
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
|
|
4
|
+
JSEncrypt.prototype.encryptLong2 = function (string) {
|
|
5
|
+
var k = this.getKey();
|
|
6
|
+
// console.log(k);
|
|
7
|
+
try {
|
|
8
|
+
var lt = "";
|
|
9
|
+
var ct = "";
|
|
10
|
+
//RSA每次加密117bytes,需要辅助方法判断字符串截取位置
|
|
11
|
+
//1.获取字符串截取点
|
|
12
|
+
var bytes = new Array();
|
|
13
|
+
bytes.push(0);
|
|
14
|
+
var byteNo = 0;
|
|
15
|
+
var len, c;
|
|
16
|
+
len = string.length;
|
|
17
|
+
var temp = 0;
|
|
18
|
+
for (var i = 0; i < len; i++) {
|
|
19
|
+
c = string.charCodeAt(i);
|
|
20
|
+
if (c >= 0x010000 && c <= 0x10FFFF) {
|
|
21
|
+
byteNo += 4;
|
|
22
|
+
} else if (c >= 0x000800 && c <= 0x00FFFF) {
|
|
23
|
+
byteNo += 3;
|
|
24
|
+
} else if (c >= 0x000080 && c <= 0x0007FF) {
|
|
25
|
+
byteNo += 2;
|
|
26
|
+
} else {
|
|
27
|
+
byteNo += 1;
|
|
28
|
+
}
|
|
29
|
+
if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
|
|
30
|
+
if (byteNo - temp >= 114) {
|
|
31
|
+
bytes.push(i);
|
|
32
|
+
temp = byteNo;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//2.截取字符串并分段加密
|
|
37
|
+
if (bytes.length > 1) {
|
|
38
|
+
for (var i = 0; i < bytes.length - 1; i++) {
|
|
39
|
+
var str;
|
|
40
|
+
if (i == 0) {
|
|
41
|
+
str = string.substring(0, bytes[i + 1] + 1);
|
|
42
|
+
} else {
|
|
43
|
+
str = string.substring(bytes[i] + 1, bytes[i + 1] + 1);
|
|
44
|
+
}
|
|
45
|
+
var t1 = k.encrypt(str);
|
|
46
|
+
ct += t1;
|
|
47
|
+
}
|
|
48
|
+
;
|
|
49
|
+
if (bytes[bytes.length - 1] != string.length - 1) {
|
|
50
|
+
var lastStr = string.substring(bytes[bytes.length - 1] + 1);
|
|
51
|
+
ct += k.encrypt(lastStr);
|
|
52
|
+
}
|
|
53
|
+
return hex2b64(ct);
|
|
54
|
+
}
|
|
55
|
+
var t = k.encrypt(string);
|
|
56
|
+
var y = hex2b64(t);
|
|
57
|
+
return y;
|
|
58
|
+
} catch (ex) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
JSEncrypt.prototype.decryptLong2 = function (string) {
|
|
64
|
+
var k = this.getKey();
|
|
65
|
+
// var maxLength = ((k.n.bitLength()+7)>>3);
|
|
66
|
+
var MAX_DECRYPT_BLOCK = 128;
|
|
67
|
+
try {
|
|
68
|
+
var ct = "";
|
|
69
|
+
var t1;
|
|
70
|
+
var bufTmp;
|
|
71
|
+
var hexTmp;
|
|
72
|
+
var str = b64tohex(string);
|
|
73
|
+
var buf = hexToBytes(str);
|
|
74
|
+
var inputLen = buf.length;
|
|
75
|
+
//开始长度
|
|
76
|
+
var offSet = 0;
|
|
77
|
+
//结束长度
|
|
78
|
+
var endOffSet = MAX_DECRYPT_BLOCK;
|
|
79
|
+
//分段加密
|
|
80
|
+
while (inputLen - offSet > 0) {
|
|
81
|
+
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
|
|
82
|
+
bufTmp = buf.slice(offSet, endOffSet);
|
|
83
|
+
hexTmp = bytesToHex(bufTmp);
|
|
84
|
+
t1 = k.decrypt(hexTmp);
|
|
85
|
+
ct += t1;
|
|
86
|
+
|
|
87
|
+
} else {
|
|
88
|
+
|
|
89
|
+
bufTmp = buf.slice(offSet, inputLen);
|
|
90
|
+
hexTmp = bytesToHex(bufTmp);
|
|
91
|
+
t1 = k.decrypt(hexTmp);
|
|
92
|
+
ct += t1;
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
offSet += MAX_DECRYPT_BLOCK;
|
|
96
|
+
endOffSet += MAX_DECRYPT_BLOCK;
|
|
97
|
+
}
|
|
98
|
+
return ct;
|
|
99
|
+
} catch (ex) {
|
|
100
|
+
console.log(ex);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
function hex2b64(h) {
|
|
106
|
+
var i;
|
|
107
|
+
var c;
|
|
108
|
+
var ret = "";
|
|
109
|
+
for(i = 0; i+3 <= h.length; i+=3) {
|
|
110
|
+
c = parseInt(h.substring(i,i+3),16);
|
|
111
|
+
ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
|
|
112
|
+
}
|
|
113
|
+
if(i+1 == h.length) {
|
|
114
|
+
c = parseInt(h.substring(i,i+1),16);
|
|
115
|
+
ret += b64map.charAt(c << 2);
|
|
116
|
+
}
|
|
117
|
+
else if(i+2 == h.length) {
|
|
118
|
+
c = parseInt(h.substring(i,i+2),16);
|
|
119
|
+
ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
|
|
120
|
+
}
|
|
121
|
+
while((ret.length & 3) > 0) ret += b64pad;
|
|
122
|
+
return ret;
|
|
123
|
+
}
|
|
124
|
+
function b64tohex(s) {
|
|
125
|
+
var ret = "";
|
|
126
|
+
var i;
|
|
127
|
+
var k = 0; // b64 state, 0-3
|
|
128
|
+
var slop = 0;
|
|
129
|
+
for (i = 0; i < s.length; ++i) {
|
|
130
|
+
if (s.charAt(i) == b64pad) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
var v = b64map.indexOf(s.charAt(i));
|
|
134
|
+
if (v < 0) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (k == 0) {
|
|
138
|
+
ret += int2char(v >> 2);
|
|
139
|
+
slop = v & 3;
|
|
140
|
+
k = 1;
|
|
141
|
+
}
|
|
142
|
+
else if (k == 1) {
|
|
143
|
+
ret += int2char((slop << 2) | (v >> 4));
|
|
144
|
+
slop = v & 0xf;
|
|
145
|
+
k = 2;
|
|
146
|
+
}
|
|
147
|
+
else if (k == 2) {
|
|
148
|
+
ret += int2char(slop);
|
|
149
|
+
ret += int2char(v >> 2);
|
|
150
|
+
slop = v & 3;
|
|
151
|
+
k = 3;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
ret += int2char((slop << 2) | (v >> 4));
|
|
155
|
+
ret += int2char(v & 0xf);
|
|
156
|
+
k = 0;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (k == 1) {
|
|
160
|
+
ret += int2char(slop << 2);
|
|
161
|
+
}
|
|
162
|
+
return ret;
|
|
163
|
+
}
|
|
164
|
+
function hexToBytes(hex) {
|
|
165
|
+
for (var bytes = [], c = 0; c < hex.length; c += 2)
|
|
166
|
+
bytes.push(parseInt(hex.substr(c, 2), 16));
|
|
167
|
+
return bytes;
|
|
168
|
+
}
|
|
169
|
+
function bytesToHex(bytes) {
|
|
170
|
+
for (var hex = [], i = 0; i < bytes.length; i++) {
|
|
171
|
+
hex.push((bytes[i] >>> 4).toString(16));
|
|
172
|
+
hex.push((bytes[i] & 0xF).toString(16));
|
|
173
|
+
}
|
|
174
|
+
return hex.join("");
|
|
175
|
+
}
|
|
176
|
+
function int2char(n) {
|
|
177
|
+
return BI_RM.charAt(n);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export default JSEncrypt;
|
package/scripts/md5.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
let md5 = function(s) {
|
|
2
|
+
/*
|
|
3
|
+
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
|
4
|
+
* Digest Algorithm, as defined in RFC 1321.
|
|
5
|
+
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
|
|
6
|
+
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
|
7
|
+
* Distributed under the BSD License
|
|
8
|
+
* See http://pajhome.org.uk/crypt/md5 for more info.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Configurable variables. You may need to tweak these to be compatible with
|
|
13
|
+
* the server-side, but the defaults work in most cases.
|
|
14
|
+
*/
|
|
15
|
+
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
|
|
16
|
+
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
|
|
17
|
+
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* These are the functions you'll usually want to call
|
|
21
|
+
* They take string arguments and return either hex or base-64 encoded strings
|
|
22
|
+
*/
|
|
23
|
+
function hex_md5(s) {
|
|
24
|
+
return binl2hex(core_md5(str2binl(s), s.length * chrsz));
|
|
25
|
+
}
|
|
26
|
+
function b64_md5(s) {
|
|
27
|
+
return binl2b64(core_md5(str2binl(s), s.length * chrsz));
|
|
28
|
+
}
|
|
29
|
+
function str_md5(s) {
|
|
30
|
+
return binl2str(core_md5(str2binl(s), s.length * chrsz));
|
|
31
|
+
}
|
|
32
|
+
function hex_hmac_md5(key, data) {
|
|
33
|
+
return binl2hex(core_hmac_md5(key, data));
|
|
34
|
+
}
|
|
35
|
+
function b64_hmac_md5(key, data) {
|
|
36
|
+
return binl2b64(core_hmac_md5(key, data));
|
|
37
|
+
}
|
|
38
|
+
function str_hmac_md5(key, data) {
|
|
39
|
+
return binl2str(core_hmac_md5(key, data));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* Perform a simple self-test to see if the VM is working
|
|
44
|
+
*/
|
|
45
|
+
function md5_vm_test() {
|
|
46
|
+
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* Calculate the MD5 of an array of little-endian words, and a bit length
|
|
51
|
+
*/
|
|
52
|
+
function core_md5(x, len) {
|
|
53
|
+
/* append padding */
|
|
54
|
+
x[len >> 5] |= 0x80 << len % 32;
|
|
55
|
+
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
|
56
|
+
|
|
57
|
+
var a = 1732584193;
|
|
58
|
+
var b = -271733879;
|
|
59
|
+
var c = -1732584194;
|
|
60
|
+
var d = 271733878;
|
|
61
|
+
|
|
62
|
+
for (var i = 0; i < x.length; i += 16) {
|
|
63
|
+
var olda = a;
|
|
64
|
+
var oldb = b;
|
|
65
|
+
var oldc = c;
|
|
66
|
+
var oldd = d;
|
|
67
|
+
|
|
68
|
+
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
|
|
69
|
+
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
70
|
+
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
71
|
+
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
72
|
+
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
73
|
+
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
74
|
+
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
75
|
+
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
76
|
+
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
77
|
+
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
78
|
+
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
79
|
+
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
80
|
+
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
81
|
+
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
82
|
+
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
83
|
+
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
84
|
+
|
|
85
|
+
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
86
|
+
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
87
|
+
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
88
|
+
b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
|
|
89
|
+
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
90
|
+
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
91
|
+
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
92
|
+
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
93
|
+
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
94
|
+
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
95
|
+
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
96
|
+
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
97
|
+
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
98
|
+
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
99
|
+
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
100
|
+
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
101
|
+
|
|
102
|
+
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
103
|
+
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
104
|
+
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
105
|
+
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
106
|
+
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
107
|
+
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
108
|
+
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
109
|
+
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
110
|
+
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
111
|
+
d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
|
|
112
|
+
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
113
|
+
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
114
|
+
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
115
|
+
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
116
|
+
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
117
|
+
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
118
|
+
|
|
119
|
+
a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
|
|
120
|
+
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
121
|
+
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
122
|
+
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
123
|
+
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
124
|
+
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
125
|
+
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
126
|
+
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
127
|
+
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
128
|
+
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
129
|
+
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
130
|
+
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
131
|
+
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
132
|
+
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
133
|
+
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
134
|
+
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
135
|
+
|
|
136
|
+
a = safe_add(a, olda);
|
|
137
|
+
b = safe_add(b, oldb);
|
|
138
|
+
c = safe_add(c, oldc);
|
|
139
|
+
d = safe_add(d, oldd);
|
|
140
|
+
}
|
|
141
|
+
return Array(a, b, c, d);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* These functions implement the four basic operations the algorithm uses.
|
|
146
|
+
*/
|
|
147
|
+
function md5_cmn(q, a, b, x, s, t) {
|
|
148
|
+
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
|
149
|
+
}
|
|
150
|
+
function md5_ff(a, b, c, d, x, s, t) {
|
|
151
|
+
return md5_cmn((b & c) | (~b & d), a, b, x, s, t);
|
|
152
|
+
}
|
|
153
|
+
function md5_gg(a, b, c, d, x, s, t) {
|
|
154
|
+
return md5_cmn((b & d) | (c & ~d), a, b, x, s, t);
|
|
155
|
+
}
|
|
156
|
+
function md5_hh(a, b, c, d, x, s, t) {
|
|
157
|
+
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
|
158
|
+
}
|
|
159
|
+
function md5_ii(a, b, c, d, x, s, t) {
|
|
160
|
+
return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
* Calculate the HMAC-MD5, of a key and some data
|
|
165
|
+
*/
|
|
166
|
+
function core_hmac_md5(key, data) {
|
|
167
|
+
var bkey = str2binl(key);
|
|
168
|
+
if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
|
|
169
|
+
|
|
170
|
+
var ipad = Array(16),
|
|
171
|
+
opad = Array(16);
|
|
172
|
+
for (var i = 0; i < 16; i++) {
|
|
173
|
+
ipad[i] = bkey[i] ^ 0x36363636;
|
|
174
|
+
opad[i] = bkey[i] ^ 0x5c5c5c5c;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
|
|
178
|
+
return core_md5(opad.concat(hash), 512 + 128);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
|
183
|
+
* to work around bugs in some JS interpreters.
|
|
184
|
+
*/
|
|
185
|
+
function safe_add(x, y) {
|
|
186
|
+
var lsw = (x & 0xffff) + (y & 0xffff);
|
|
187
|
+
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
188
|
+
return (msw << 16) | (lsw & 0xffff);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/*
|
|
192
|
+
* Bitwise rotate a 32-bit number to the left.
|
|
193
|
+
*/
|
|
194
|
+
function bit_rol(num, cnt) {
|
|
195
|
+
return (num << cnt) | (num >>> (32 - cnt));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
* Convert a string to an array of little-endian words
|
|
200
|
+
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
|
|
201
|
+
*/
|
|
202
|
+
function str2binl(str) {
|
|
203
|
+
var bin = Array();
|
|
204
|
+
var mask = (1 << chrsz) - 1;
|
|
205
|
+
for (var i = 0; i < str.length * chrsz; i += chrsz) {
|
|
206
|
+
bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
|
|
207
|
+
}
|
|
208
|
+
return bin;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/*
|
|
212
|
+
* Convert an array of little-endian words to a string
|
|
213
|
+
*/
|
|
214
|
+
function binl2str(bin) {
|
|
215
|
+
var str = "";
|
|
216
|
+
var mask = (1 << chrsz) - 1;
|
|
217
|
+
for (var i = 0; i < bin.length * 32; i += chrsz) {
|
|
218
|
+
str += String.fromCharCode((bin[i >> 5] >>> i % 32) & mask);
|
|
219
|
+
}
|
|
220
|
+
return str;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/*
|
|
224
|
+
* Convert an array of little-endian words to a hex string.
|
|
225
|
+
*/
|
|
226
|
+
function binl2hex(binarray) {
|
|
227
|
+
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
|
|
228
|
+
var str = "";
|
|
229
|
+
for (var i = 0; i < binarray.length * 4; i++) {
|
|
230
|
+
str +=
|
|
231
|
+
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xf) +
|
|
232
|
+
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xf);
|
|
233
|
+
}
|
|
234
|
+
return str;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/*
|
|
238
|
+
* Convert an array of little-endian words to a base-64 string
|
|
239
|
+
*/
|
|
240
|
+
function binl2b64(binarray) {
|
|
241
|
+
var tab =
|
|
242
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
243
|
+
var str = "";
|
|
244
|
+
for (var i = 0; i < binarray.length * 4; i += 3) {
|
|
245
|
+
var triplet =
|
|
246
|
+
(((binarray[i >> 2] >> (8 * (i % 4))) & 0xff) << 16) |
|
|
247
|
+
(((binarray[(i + 1) >> 2] >> (8 * ((i + 1) % 4))) & 0xff) << 8) |
|
|
248
|
+
((binarray[(i + 2) >> 2] >> (8 * ((i + 2) % 4))) & 0xff);
|
|
249
|
+
for (var j = 0; j < 4; j++) {
|
|
250
|
+
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
|
|
251
|
+
else str += tab.charAt((triplet >> (6 * (3 - j))) & 0x3f);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return str;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return hex_md5(s);
|
|
258
|
+
};
|
|
259
|
+
export default md5;
|