mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 20:33:03 +00:00
0..0
This commit is contained in:
@@ -1,19 +1,22 @@
|
||||
package cn.qaiu.util;
|
||||
|
||||
import io.vertx.core.net.impl.URIDecoder;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.crypto.*;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.Key;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.*;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.HexFormat;
|
||||
import java.util.Random;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* AES加解密工具类
|
||||
@@ -39,6 +42,12 @@ public class AESUtils {
|
||||
public static final String CIPHER_AES0;
|
||||
public static final String CIPHER_AES0_IZ;
|
||||
|
||||
|
||||
public static final String MG_PKEY2 = "D8jg+H2iNX94zvHhRLnSM3oy59dH2QQjxQ0GgKJSL+mJclbCcItjV3AmkPY6WcbV4hNQk5+hN2J1eTrxPQqF4p28e3FTsGRCXVN80CLS+XqpFNY/9xuyf2bvbeq5JJU1IBCXgSZmEo8zu0/VGS3YNeDsHtjg92QSrRY8i4A+shihZBSz0/0KOL1VPd/K4tAYvsI9YjVFOI7z9mJJ8Ek8rVUplurJyGkjevRfvReN7xQ67PR+yZovk72yTZKlHDz5jVpLGLOy2iwTTSTbTvtnOi9TSE6sSPtRHv16cxZYZQY=";
|
||||
public static final String MG_PKEY;
|
||||
|
||||
public static final String MG_KEY = "4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e";
|
||||
|
||||
/**
|
||||
* 秘钥长度
|
||||
*/
|
||||
@@ -63,6 +72,7 @@ public class AESUtils {
|
||||
try {
|
||||
CIPHER_AES0 = decryptByBase64AES(CIPHER_AES2, CIPHER_AES);
|
||||
CIPHER_AES0_IZ = decryptByBase64AES(CIPHER_AES2_IZ, CIPHER_AES);
|
||||
MG_PKEY = decryptByBase64AES(MG_PKEY2, CIPHER_AES2);
|
||||
} catch (IllegalBlockSizeException | BadPaddingException | NoSuchPaddingException | NoSuchAlgorithmException |
|
||||
InvalidKeyException e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -329,4 +339,73 @@ public class AESUtils {
|
||||
return _0x53928f + "-" + _0x430930 + "-" + _0x49ec94;
|
||||
}
|
||||
|
||||
|
||||
public static String encrypt(String str, String pwd) {
|
||||
if (pwd == null || pwd.length() <= 0) {
|
||||
throw new IllegalArgumentException("Please enter a password with which to encrypt the message.");
|
||||
}
|
||||
|
||||
// 生成 prand 值
|
||||
StringBuilder prand = new StringBuilder();
|
||||
for (int i = 0; i < pwd.length(); i++) {
|
||||
prand.append((int) pwd.charAt(i));
|
||||
}
|
||||
|
||||
// 计算 sPos, mult, incr, modu
|
||||
int sPos = prand.length() / 5;
|
||||
long mult = Long.parseLong(prand.substring(sPos, sPos + 1) +
|
||||
prand.substring(sPos * 2, sPos * 2 + 1) +
|
||||
prand.substring(sPos * 3, sPos * 3 + 1) +
|
||||
prand.substring(sPos * 4, sPos * 4 + 1) +
|
||||
prand.substring(sPos * 5, sPos * 5 + 1));
|
||||
int incr = (int) Math.ceil(pwd.length() / 2.0);
|
||||
long modu = (long) Math.pow(2, 31) - 1;
|
||||
|
||||
if (mult < 2) {
|
||||
throw new IllegalArgumentException("Algorithm cannot find a suitable hash. Please choose a different password.");
|
||||
}
|
||||
|
||||
// 生成 salt 并加到 prand 上
|
||||
long salt = Math.round(Math.random() * 1000000000) % 100000000;
|
||||
prand.append(salt);
|
||||
|
||||
// 使用 BigInteger 处理超过 Long 范围的 prand 值
|
||||
BigInteger prandValue = new BigInteger(prand.toString());
|
||||
while (prandValue.toString().length() > 10) {
|
||||
prandValue = prandValue.divide(BigInteger.TEN).add(prandValue.remainder(BigInteger.TEN));
|
||||
}
|
||||
|
||||
// 将 prand 转换为 long 进行后续处理
|
||||
prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
|
||||
|
||||
// 加密过程
|
||||
StringBuilder encStr = new StringBuilder();
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
// 将字符和异或的结果强制转换为 int
|
||||
int encChr = (int) (str.charAt(i) ^ (int) ((prandValue.doubleValue() / modu) * 255));
|
||||
String hexStr = Integer.toHexString(encChr);
|
||||
if (hexStr.length() < 2) {
|
||||
encStr.append("0");
|
||||
}
|
||||
encStr.append(hexStr);
|
||||
|
||||
prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
|
||||
}
|
||||
|
||||
// 将 salt 转换为 16 进制并追加到加密结果
|
||||
String saltHex = Long.toHexString(salt);
|
||||
while (saltHex.length() < 8) {
|
||||
saltHex = "0" + saltHex;
|
||||
}
|
||||
encStr.append(saltHex);
|
||||
|
||||
return encStr.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 示例
|
||||
String encrypted = encrypt("HelloWorld", "password123");
|
||||
System.out.println("Encrypted String: " + encrypted);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -188,4 +188,870 @@ public interface JsContent {
|
||||
return enc_str;
|
||||
}
|
||||
""";
|
||||
|
||||
String mgJS = """
|
||||
|
||||
|
||||
var XO, qO = {
|
||||
exports: {}
|
||||
}, JO = {
|
||||
exports: {}
|
||||
};
|
||||
|
||||
var qb = globalThis = this
|
||||
|
||||
JO.exports = (XO = XO || function (e, t) {
|
||||
var n;
|
||||
if ("undefined" != typeof window && window.crypto && (n = window.crypto),
|
||||
"undefined" != typeof self && self.crypto && (n = self.crypto),
|
||||
"undefined" != typeof globalThis && globalThis.crypto && (n = globalThis.crypto),
|
||||
!n && "undefined" != typeof window && window.msCrypto && (n = window.msCrypto),
|
||||
!n && void 0 !== qb && qb.crypto && (n = qb.crypto),
|
||||
!n)
|
||||
try {
|
||||
n = require("crypto")
|
||||
} catch (g) {
|
||||
}
|
||||
var r = function () {
|
||||
|
||||
return Math.floor(Math.random() * 0xFFFFFFFF + 0)
|
||||
}
|
||||
, o = Object.create || function () {
|
||||
function e() {
|
||||
}
|
||||
|
||||
return function (t) {
|
||||
var n;
|
||||
return e.prototype = t,
|
||||
n = new e,
|
||||
e.prototype = null,
|
||||
n
|
||||
}
|
||||
}()
|
||||
, a = {}
|
||||
, i = a.lib = {}
|
||||
, l = i.Base = {
|
||||
extend: function (e) {
|
||||
var t = o(this);
|
||||
return e && t.mixIn(e),
|
||||
t.hasOwnProperty("init") && this.init !== t.init || (t.init = function () {
|
||||
t.$super.init.apply(this, arguments)
|
||||
}
|
||||
),
|
||||
t.init.prototype = t,
|
||||
t.$super = this,
|
||||
t
|
||||
},
|
||||
create: function () {
|
||||
var e = this.extend();
|
||||
return e.init.apply(e, arguments),
|
||||
e
|
||||
},
|
||||
init: function () {
|
||||
},
|
||||
mixIn: function (e) {
|
||||
for (var t in e)
|
||||
e.hasOwnProperty(t) && (this[t] = e[t]);
|
||||
e.hasOwnProperty("toString") && (this.toString = e.toString)
|
||||
},
|
||||
clone: function () {
|
||||
return this.init.prototype.extend(this)
|
||||
}
|
||||
}
|
||||
, s = i.WordArray = l.extend({
|
||||
init: function (e, n) {
|
||||
e = this.words = e || [],
|
||||
this.sigBytes = n != t ? n : 4 * e.length
|
||||
},
|
||||
toString: function (e) {
|
||||
return (e || c).stringify(this)
|
||||
},
|
||||
concat: function (e) {
|
||||
var t = this.words
|
||||
, n = e.words
|
||||
, r = this.sigBytes
|
||||
, o = e.sigBytes;
|
||||
if (this.clamp(),
|
||||
r % 4)
|
||||
for (var a = 0; a < o; a++) {
|
||||
var i = n[a >>> 2] >>> 24 - a % 4 * 8 & 255;
|
||||
t[r + a >>> 2] |= i << 24 - (r + a) % 4 * 8
|
||||
}
|
||||
else
|
||||
for (var l = 0; l < o; l += 4)
|
||||
t[r + l >>> 2] = n[l >>> 2];
|
||||
return this.sigBytes += o,
|
||||
this
|
||||
},
|
||||
clamp: function () {
|
||||
var t = this.words
|
||||
, n = this.sigBytes;
|
||||
t[n >>> 2] &= 4294967295 << 32 - n % 4 * 8,
|
||||
t.length = e.ceil(n / 4)
|
||||
},
|
||||
clone: function () {
|
||||
var e = l.clone.call(this);
|
||||
return e.words = this.words.slice(0),
|
||||
e
|
||||
},
|
||||
random: function (e) {
|
||||
for (var t = [], n = 0; n < e; n += 4)
|
||||
t.push(r());
|
||||
return new s.init(t, e)
|
||||
}
|
||||
})
|
||||
, u = a.enc = {}
|
||||
, c = u.Hex = {
|
||||
stringify: function (e) {
|
||||
for (var t = e.words, n = e.sigBytes, r = [], o = 0; o < n; o++) {
|
||||
var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
|
||||
r.push((a >>> 4).toString(16)),
|
||||
r.push((15 & a).toString(16))
|
||||
}
|
||||
return r.join("")
|
||||
},
|
||||
parse: function (e) {
|
||||
for (var t = e.length, n = [], r = 0; r < t; r += 2)
|
||||
n[r >>> 3] |= parseInt(e.substr(r, 2), 16) << 24 - r % 8 * 4;
|
||||
return new s.init(n, t / 2)
|
||||
}
|
||||
}
|
||||
, d = u.Latin1 = {
|
||||
stringify: function (e) {
|
||||
for (var t = e.words, n = e.sigBytes, r = [], o = 0; o < n; o++) {
|
||||
var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
|
||||
r.push(String.fromCharCode(a))
|
||||
}
|
||||
return r.join("")
|
||||
},
|
||||
parse: function (e) {
|
||||
for (var t = e.length, n = [], r = 0; r < t; r++)
|
||||
n[r >>> 2] |= (255 & e.charCodeAt(r)) << 24 - r % 4 * 8;
|
||||
return new s.init(n, t)
|
||||
}
|
||||
}
|
||||
, p = u.Utf8 = {
|
||||
stringify: function (e) {
|
||||
try {
|
||||
return decodeURIComponent(escape(d.stringify(e)))
|
||||
} catch (RE) {
|
||||
throw new Error("Malformed UTF-8 data")
|
||||
}
|
||||
},
|
||||
parse: function (e) {
|
||||
return d.parse(unescape(encodeURIComponent(e)))
|
||||
}
|
||||
}
|
||||
, f = i.BufferedBlockAlgorithm = l.extend({
|
||||
reset: function () {
|
||||
this._data = new s.init,
|
||||
this._nDataBytes = 0
|
||||
},
|
||||
_append: function (e) {
|
||||
"string" == typeof e && (e = p.parse(e)),
|
||||
this._data.concat(e),
|
||||
this._nDataBytes += e.sigBytes
|
||||
},
|
||||
_process: function (t) {
|
||||
var n, r = this._data, o = r.words, a = r.sigBytes, i = this.blockSize, l = a / (4 * i),
|
||||
u = (l = t ? e.ceil(l) : e.max((0 | l) - this._minBufferSize, 0)) * i, c = e.min(4 * u, a);
|
||||
if (u) {
|
||||
for (var d = 0; d < u; d += i)
|
||||
this._doProcessBlock(o, d);
|
||||
n = o.splice(0, u),
|
||||
r.sigBytes -= c
|
||||
}
|
||||
return new s.init(n, c)
|
||||
},
|
||||
clone: function () {
|
||||
var e = l.clone.call(this);
|
||||
return e._data = this._data.clone(),
|
||||
e
|
||||
},
|
||||
_minBufferSize: 0
|
||||
});
|
||||
i.Hasher = f.extend({
|
||||
cfg: l.extend(),
|
||||
init: function (e) {
|
||||
this.cfg = this.cfg.extend(e),
|
||||
this.reset()
|
||||
},
|
||||
reset: function () {
|
||||
f.reset.call(this),
|
||||
this._doReset()
|
||||
},
|
||||
update: function (e) {
|
||||
return this._append(e),
|
||||
this._process(),
|
||||
this
|
||||
},
|
||||
finalize: function (e) {
|
||||
return e && this._append(e),
|
||||
this._doFinalize()
|
||||
},
|
||||
blockSize: 16,
|
||||
_createHelper: function (e) {
|
||||
return function (t, n) {
|
||||
return new e.init(n).finalize(t)
|
||||
}
|
||||
},
|
||||
_createHmacHelper: function (e) {
|
||||
return function (t, n) {
|
||||
return new h.HMAC.init(e, n).finalize(t)
|
||||
}
|
||||
}
|
||||
});
|
||||
var h = a.algo = {};
|
||||
return a
|
||||
}(Math), XO);
|
||||
|
||||
var QO = {
|
||||
exports: {}
|
||||
};
|
||||
QO.exports = function (e) {
|
||||
return r = (n = e).lib,
|
||||
o = r.Base,
|
||||
a = r.WordArray,
|
||||
(i = n.x64 = {}).Word = o.extend({
|
||||
init: function (e, t) {
|
||||
this.high = e,
|
||||
this.low = t
|
||||
}
|
||||
}),
|
||||
i.WordArray = o.extend({
|
||||
init: function (e, n) {
|
||||
e = this.words = e || [],
|
||||
this.sigBytes = n != t ? n : 8 * e.length
|
||||
},
|
||||
toX32: function () {
|
||||
for (var e = this.words, t = e.length, n = [], r = 0; r < t; r++) {
|
||||
var o = e[r];
|
||||
n.push(o.high),
|
||||
n.push(o.low)
|
||||
}
|
||||
return a.create(n, this.sigBytes)
|
||||
},
|
||||
clone: function () {
|
||||
for (var e = o.clone.call(this), t = e.words = this.words.slice(0), n = t.length, r = 0; r < n; r++)
|
||||
t[r] = t[r].clone();
|
||||
return e
|
||||
}
|
||||
}),
|
||||
e;
|
||||
var t, n, r, o, a, i
|
||||
}(JO.exports);
|
||||
|
||||
var nM = {
|
||||
exports: {}
|
||||
};
|
||||
nM.exports = function (e) {
|
||||
return function () {
|
||||
var t = e
|
||||
, n = t.lib.WordArray;
|
||||
|
||||
function r(e, t, r) {
|
||||
for (var o = [], a = 0, i = 0; i < t; i++)
|
||||
if (i % 4) {
|
||||
var l = r[e.charCodeAt(i - 1)] << i % 4 * 2 | r[e.charCodeAt(i)] >>> 6 - i % 4 * 2;
|
||||
o[a >>> 2] |= l << 24 - a % 4 * 8,
|
||||
a++
|
||||
}
|
||||
return n.create(o, a)
|
||||
}
|
||||
|
||||
t.enc.Base64 = {
|
||||
stringify: function (e) {
|
||||
var t = e.words
|
||||
, n = e.sigBytes
|
||||
, r = this._map;
|
||||
e.clamp();
|
||||
for (var o = [], a = 0; a < n; a += 3)
|
||||
for (var i = (t[a >>> 2] >>> 24 - a % 4 * 8 & 255) << 16 | (t[a + 1 >>> 2] >>> 24 - (a + 1) % 4 * 8 & 255) << 8 | t[a + 2 >>> 2] >>> 24 - (a + 2) % 4 * 8 & 255, l = 0; l < 4 && a + .75 * l < n; l++)
|
||||
o.push(r.charAt(i >>> 6 * (3 - l) & 63));
|
||||
var s = r.charAt(64);
|
||||
if (s)
|
||||
for (; o.length % 4;)
|
||||
o.push(s);
|
||||
return o.join("")
|
||||
},
|
||||
parse: function (e) {
|
||||
var t = e.length
|
||||
, n = this._map
|
||||
, o = this._reverseMap;
|
||||
if (!o) {
|
||||
o = this._reverseMap = [];
|
||||
for (var a = 0; a < n.length; a++)
|
||||
o[n.charCodeAt(a)] = a
|
||||
}
|
||||
var i = n.charAt(64);
|
||||
if (i) {
|
||||
var l = e.indexOf(i);
|
||||
-1 !== l && (t = l)
|
||||
}
|
||||
return r(e, t, o)
|
||||
},
|
||||
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
|
||||
}
|
||||
}(),
|
||||
e.enc.Base64
|
||||
}(JO.exports);
|
||||
|
||||
var oM = {
|
||||
exports: {}
|
||||
};
|
||||
oM.exports = function (e) {
|
||||
return function (t) {
|
||||
var n = e
|
||||
, r = n.lib
|
||||
, o = r.WordArray
|
||||
, a = r.Hasher
|
||||
, i = n.algo
|
||||
, l = [];
|
||||
!function () {
|
||||
for (var e = 0; e < 64; e++)
|
||||
l[e] = 4294967296 * t.abs(t.sin(e + 1)) | 0
|
||||
}();
|
||||
var s = i.MD5 = a.extend({
|
||||
_doReset: function () {
|
||||
this._hash = new o.init([1732584193, 4023233417, 2562383102, 271733878])
|
||||
},
|
||||
_doProcessBlock: function (e, t) {
|
||||
for (var n = 0; n < 16; n++) {
|
||||
var r = t + n
|
||||
, o = e[r];
|
||||
e[r] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8)
|
||||
}
|
||||
var a = this._hash.words
|
||||
, i = e[t + 0]
|
||||
, s = e[t + 1]
|
||||
, f = e[t + 2]
|
||||
, h = e[t + 3]
|
||||
, g = e[t + 4]
|
||||
, v = e[t + 5]
|
||||
, m = e[t + 6]
|
||||
, y = e[t + 7]
|
||||
, b = e[t + 8]
|
||||
, C = e[t + 9]
|
||||
, _ = e[t + 10]
|
||||
, E = e[t + 11]
|
||||
, F = e[t + 12]
|
||||
, A = e[t + 13]
|
||||
, w = e[t + 14]
|
||||
, D = e[t + 15]
|
||||
, x = a[0]
|
||||
, S = a[1]
|
||||
, B = a[2]
|
||||
, k = a[3];
|
||||
x = u(x, S, B, k, i, 7, l[0]),
|
||||
k = u(k, x, S, B, s, 12, l[1]),
|
||||
B = u(B, k, x, S, f, 17, l[2]),
|
||||
S = u(S, B, k, x, h, 22, l[3]),
|
||||
x = u(x, S, B, k, g, 7, l[4]),
|
||||
k = u(k, x, S, B, v, 12, l[5]),
|
||||
B = u(B, k, x, S, m, 17, l[6]),
|
||||
S = u(S, B, k, x, y, 22, l[7]),
|
||||
x = u(x, S, B, k, b, 7, l[8]),
|
||||
k = u(k, x, S, B, C, 12, l[9]),
|
||||
B = u(B, k, x, S, _, 17, l[10]),
|
||||
S = u(S, B, k, x, E, 22, l[11]),
|
||||
x = u(x, S, B, k, F, 7, l[12]),
|
||||
k = u(k, x, S, B, A, 12, l[13]),
|
||||
B = u(B, k, x, S, w, 17, l[14]),
|
||||
x = c(x, S = u(S, B, k, x, D, 22, l[15]), B, k, s, 5, l[16]),
|
||||
k = c(k, x, S, B, m, 9, l[17]),
|
||||
B = c(B, k, x, S, E, 14, l[18]),
|
||||
S = c(S, B, k, x, i, 20, l[19]),
|
||||
x = c(x, S, B, k, v, 5, l[20]),
|
||||
k = c(k, x, S, B, _, 9, l[21]),
|
||||
B = c(B, k, x, S, D, 14, l[22]),
|
||||
S = c(S, B, k, x, g, 20, l[23]),
|
||||
x = c(x, S, B, k, C, 5, l[24]),
|
||||
k = c(k, x, S, B, w, 9, l[25]),
|
||||
B = c(B, k, x, S, h, 14, l[26]),
|
||||
S = c(S, B, k, x, b, 20, l[27]),
|
||||
x = c(x, S, B, k, A, 5, l[28]),
|
||||
k = c(k, x, S, B, f, 9, l[29]),
|
||||
B = c(B, k, x, S, y, 14, l[30]),
|
||||
x = d(x, S = c(S, B, k, x, F, 20, l[31]), B, k, v, 4, l[32]),
|
||||
k = d(k, x, S, B, b, 11, l[33]),
|
||||
B = d(B, k, x, S, E, 16, l[34]),
|
||||
S = d(S, B, k, x, w, 23, l[35]),
|
||||
x = d(x, S, B, k, s, 4, l[36]),
|
||||
k = d(k, x, S, B, g, 11, l[37]),
|
||||
B = d(B, k, x, S, y, 16, l[38]),
|
||||
S = d(S, B, k, x, _, 23, l[39]),
|
||||
x = d(x, S, B, k, A, 4, l[40]),
|
||||
k = d(k, x, S, B, i, 11, l[41]),
|
||||
B = d(B, k, x, S, h, 16, l[42]),
|
||||
S = d(S, B, k, x, m, 23, l[43]),
|
||||
x = d(x, S, B, k, C, 4, l[44]),
|
||||
k = d(k, x, S, B, F, 11, l[45]),
|
||||
B = d(B, k, x, S, D, 16, l[46]),
|
||||
x = p(x, S = d(S, B, k, x, f, 23, l[47]), B, k, i, 6, l[48]),
|
||||
k = p(k, x, S, B, y, 10, l[49]),
|
||||
B = p(B, k, x, S, w, 15, l[50]),
|
||||
S = p(S, B, k, x, v, 21, l[51]),
|
||||
x = p(x, S, B, k, F, 6, l[52]),
|
||||
k = p(k, x, S, B, h, 10, l[53]),
|
||||
B = p(B, k, x, S, _, 15, l[54]),
|
||||
S = p(S, B, k, x, s, 21, l[55]),
|
||||
x = p(x, S, B, k, b, 6, l[56]),
|
||||
k = p(k, x, S, B, D, 10, l[57]),
|
||||
B = p(B, k, x, S, m, 15, l[58]),
|
||||
S = p(S, B, k, x, A, 21, l[59]),
|
||||
x = p(x, S, B, k, g, 6, l[60]),
|
||||
k = p(k, x, S, B, E, 10, l[61]),
|
||||
B = p(B, k, x, S, f, 15, l[62]),
|
||||
S = p(S, B, k, x, C, 21, l[63]),
|
||||
a[0] = a[0] + x | 0,
|
||||
a[1] = a[1] + S | 0,
|
||||
a[2] = a[2] + B | 0,
|
||||
a[3] = a[3] + k | 0
|
||||
},
|
||||
_doFinalize: function () {
|
||||
var e = this._data
|
||||
, n = e.words
|
||||
, r = 8 * this._nDataBytes
|
||||
, o = 8 * e.sigBytes;
|
||||
n[o >>> 5] |= 128 << 24 - o % 32;
|
||||
var a = t.floor(r / 4294967296)
|
||||
, i = r;
|
||||
n[15 + (o + 64 >>> 9 << 4)] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8),
|
||||
n[14 + (o + 64 >>> 9 << 4)] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8),
|
||||
e.sigBytes = 4 * (n.length + 1),
|
||||
this._process();
|
||||
for (var l = this._hash, s = l.words, u = 0; u < 4; u++) {
|
||||
var c = s[u];
|
||||
s[u] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8)
|
||||
}
|
||||
return l
|
||||
},
|
||||
clone: function () {
|
||||
var e = a.clone.call(this);
|
||||
return e._hash = this._hash.clone(),
|
||||
e
|
||||
}
|
||||
});
|
||||
|
||||
function u(e, t, n, r, o, a, i) {
|
||||
var l = e + (t & n | ~t & r) + o + i;
|
||||
return (l << a | l >>> 32 - a) + t
|
||||
}
|
||||
|
||||
function c(e, t, n, r, o, a, i) {
|
||||
var l = e + (t & r | n & ~r) + o + i;
|
||||
return (l << a | l >>> 32 - a) + t
|
||||
}
|
||||
|
||||
function d(e, t, n, r, o, a, i) {
|
||||
var l = e + (t ^ n ^ r) + o + i;
|
||||
return (l << a | l >>> 32 - a) + t
|
||||
}
|
||||
|
||||
function p(e, t, n, r, o, a, i) {
|
||||
var l = e + (n ^ (t | ~r)) + o + i;
|
||||
return (l << a | l >>> 32 - a) + t
|
||||
}
|
||||
|
||||
n.MD5 = a._createHelper(s),
|
||||
n.HmacMD5 = a._createHmacHelper(s)
|
||||
}(Math),
|
||||
e.MD5
|
||||
}(JO.exports);
|
||||
|
||||
var hM = {
|
||||
exports: {}
|
||||
};
|
||||
hM.exports = function (e) {
|
||||
return n = (t = e).lib,
|
||||
r = n.Base,
|
||||
o = n.WordArray,
|
||||
a = t.algo,
|
||||
i = a.MD5,
|
||||
l = a.EvpKDF = r.extend({
|
||||
cfg: r.extend({
|
||||
keySize: 4,
|
||||
hasher: i,
|
||||
iterations: 1
|
||||
}),
|
||||
init: function (e) {
|
||||
this.cfg = this.cfg.extend(e)
|
||||
},
|
||||
compute: function (e, t) {
|
||||
for (var n, r = this.cfg, a = r.hasher.create(), i = o.create(), l = i.words, s = r.keySize, u = r.iterations; l.length < s;) {
|
||||
n && a.update(n),
|
||||
n = a.update(e).finalize(t),
|
||||
a.reset();
|
||||
for (var c = 1; c < u; c++)
|
||||
n = a.finalize(n),
|
||||
a.reset();
|
||||
i.concat(n)
|
||||
}
|
||||
return i.sigBytes = 4 * s,
|
||||
i
|
||||
}
|
||||
}),
|
||||
t.EvpKDF = function (e, t, n) {
|
||||
return l.create(n).compute(e, t)
|
||||
}
|
||||
,
|
||||
e.EvpKDF;
|
||||
var t, n, r, o, a, i, l
|
||||
}(JO.exports);
|
||||
|
||||
var gM = {
|
||||
exports: {}
|
||||
};
|
||||
gM.exports = function (e) {
|
||||
e.lib.Cipher || function (t) {
|
||||
var n = e
|
||||
, r = n.lib
|
||||
, o = r.Base
|
||||
, a = r.WordArray
|
||||
, i = r.BufferedBlockAlgorithm
|
||||
, l = n.enc;
|
||||
l.Utf8;
|
||||
var s = l.Base64
|
||||
, u = n.algo.EvpKDF
|
||||
, c = r.Cipher = i.extend({
|
||||
cfg: o.extend(),
|
||||
createEncryptor: function (e, t) {
|
||||
return this.create(this._ENC_XFORM_MODE, e, t)
|
||||
},
|
||||
createDecryptor: function (e, t) {
|
||||
return this.create(this._DEC_XFORM_MODE, e, t)
|
||||
},
|
||||
init: function (e, t, n) {
|
||||
this.cfg = this.cfg.extend(n),
|
||||
this._xformMode = e,
|
||||
this._key = t,
|
||||
this.reset()
|
||||
},
|
||||
reset: function () {
|
||||
i.reset.call(this),
|
||||
this._doReset()
|
||||
},
|
||||
process: function (e) {
|
||||
return this._append(e),
|
||||
this._process()
|
||||
},
|
||||
finalize: function (e) {
|
||||
return e && this._append(e),
|
||||
this._doFinalize()
|
||||
},
|
||||
keySize: 4,
|
||||
ivSize: 4,
|
||||
_ENC_XFORM_MODE: 1,
|
||||
_DEC_XFORM_MODE: 2,
|
||||
_createHelper: function () {
|
||||
function e(e) {
|
||||
return "string" == typeof e ? b : m
|
||||
}
|
||||
|
||||
return function (t) {
|
||||
return {
|
||||
encrypt: function (n, r, o) {
|
||||
return e(r).encrypt(t, n, r, o)
|
||||
},
|
||||
decrypt: function (n, r, o) {
|
||||
return e(r).decrypt(t, n, r, o)
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
});
|
||||
|
||||
r.StreamCipher = c.extend({
|
||||
_doFinalize: function () {
|
||||
return this._process(!0)
|
||||
},
|
||||
blockSize: 1
|
||||
});
|
||||
var d = n.mode = {}
|
||||
, p = r.BlockCipherMode = o.extend({
|
||||
createEncryptor: function (e, t) {
|
||||
return this.Encryptor.create(e, t)
|
||||
},
|
||||
createDecryptor: function (e, t) {
|
||||
return this.Decryptor.create(e, t)
|
||||
},
|
||||
init: function (e, t) {
|
||||
this._cipher = e,
|
||||
this._iv = t
|
||||
}
|
||||
})
|
||||
, f = d.CBC = function () {
|
||||
var e = p.extend();
|
||||
|
||||
function n(e, n, r) {
|
||||
var o, a = this._iv;
|
||||
a ? (o = a,
|
||||
this._iv = t) : o = this._prevBlock;
|
||||
for (var i = 0; i < r; i++)
|
||||
e[n + i] ^= o[i]
|
||||
}
|
||||
|
||||
return e.Encryptor = e.extend({
|
||||
processBlock: function (e, t) {
|
||||
var r = this._cipher
|
||||
, o = r.blockSize;
|
||||
n.call(this, e, t, o),
|
||||
r.encryptBlock(e, t),
|
||||
this._prevBlock = e.slice(t, t + o)
|
||||
}
|
||||
}),
|
||||
e.Decryptor = e.extend({
|
||||
processBlock: function (e, t) {
|
||||
var r = this._cipher
|
||||
, o = r.blockSize
|
||||
, a = e.slice(t, t + o);
|
||||
r.decryptBlock(e, t),
|
||||
n.call(this, e, t, o),
|
||||
this._prevBlock = a
|
||||
}
|
||||
}),
|
||||
e
|
||||
}()
|
||||
, h = (n.pad = {}).Pkcs7 = {
|
||||
pad: function (e, t) {
|
||||
for (var n = 4 * t, r = n - e.sigBytes % n, o = r << 24 | r << 16 | r << 8 | r, i = [], l = 0; l < r; l += 4)
|
||||
i.push(o);
|
||||
var s = a.create(i, r);
|
||||
e.concat(s)
|
||||
},
|
||||
unpad: function (e) {
|
||||
var t = 255 & e.words[e.sigBytes - 1 >>> 2];
|
||||
e.sigBytes -= t
|
||||
}
|
||||
};
|
||||
r.BlockCipher = c.extend({
|
||||
cfg: c.cfg.extend({
|
||||
mode: f,
|
||||
padding: h
|
||||
}),
|
||||
reset: function () {
|
||||
var e;
|
||||
c.reset.call(this);
|
||||
var t = this.cfg
|
||||
, n = t.iv
|
||||
, r = t.mode;
|
||||
this._xformMode == this._ENC_XFORM_MODE ? e = r.createEncryptor : (e = r.createDecryptor,
|
||||
this._minBufferSize = 1),
|
||||
this._mode && this._mode.__creator == e ? this._mode.init(this, n && n.words) : (this._mode = e.call(r, this, n && n.words),
|
||||
this._mode.__creator = e)
|
||||
},
|
||||
_doProcessBlock: function (e, t) {
|
||||
this._mode.processBlock(e, t)
|
||||
},
|
||||
_doFinalize: function () {
|
||||
var e, t = this.cfg.padding;
|
||||
return this._xformMode == this._ENC_XFORM_MODE ? (t.pad(this._data, this.blockSize),
|
||||
e = this._process(!0)) : (e = this._process(!0),
|
||||
t.unpad(e)),
|
||||
e
|
||||
},
|
||||
blockSize: 4
|
||||
});
|
||||
var g = r.CipherParams = o.extend({
|
||||
init: function (e) {
|
||||
this.mixIn(e)
|
||||
},
|
||||
toString: function (e) {
|
||||
return (e || this.formatter).stringify(this)
|
||||
}
|
||||
})
|
||||
, v = (n.format = {}).OpenSSL = {
|
||||
stringify: function (e) {
|
||||
var t = e.ciphertext
|
||||
, n = e.salt;
|
||||
return (n ? a.create([1398893684, 1701076831]).concat(n).concat(t) : t).toString(s)
|
||||
},
|
||||
parse: function (e) {
|
||||
var t, n = s.parse(e), r = n.words;
|
||||
return 1398893684 == r[0] && 1701076831 == r[1] && (t = a.create(r.slice(2, 4)),
|
||||
r.splice(0, 4),
|
||||
n.sigBytes -= 16),
|
||||
g.create({
|
||||
ciphertext: n,
|
||||
salt: t
|
||||
})
|
||||
}
|
||||
}
|
||||
, m = r.SerializableCipher = o.extend({
|
||||
cfg: o.extend({
|
||||
format: v
|
||||
}),
|
||||
encrypt: function (e, t, n, r) {
|
||||
r = this.cfg.extend(r);
|
||||
var o = e.createEncryptor(n, r)
|
||||
, a = o.finalize(t)
|
||||
, i = o.cfg;
|
||||
return g.create({
|
||||
ciphertext: a,
|
||||
key: n,
|
||||
iv: i.iv,
|
||||
algorithm: e,
|
||||
mode: i.mode,
|
||||
padding: i.padding,
|
||||
blockSize: e.blockSize,
|
||||
formatter: r.format
|
||||
})
|
||||
},
|
||||
decrypt: function (e, t, n, r) {
|
||||
return r = this.cfg.extend(r),
|
||||
t = this._parse(t, r.format),
|
||||
e.createDecryptor(n, r).finalize(t.ciphertext)
|
||||
},
|
||||
_parse: function (e, t) {
|
||||
return "string" == typeof e ? t.parse(e, this) : e
|
||||
}
|
||||
})
|
||||
, y = (n.kdf = {}).OpenSSL = {
|
||||
execute: function (e, t, n, r) {
|
||||
r || (r = a.random(8));
|
||||
var o = u.create({
|
||||
keySize: t + n
|
||||
}).compute(e, r)
|
||||
, i = a.create(o.words.slice(t), 4 * n);
|
||||
return o.sigBytes = 4 * t,
|
||||
g.create({
|
||||
key: o,
|
||||
iv: i,
|
||||
salt: r
|
||||
})
|
||||
}
|
||||
}
|
||||
, b = r.PasswordBasedCipher = m.extend({
|
||||
cfg: m.cfg.extend({
|
||||
kdf: y
|
||||
}),
|
||||
encrypt: function (e, t, n, r) {
|
||||
var o = (r = this.cfg.extend(r)).kdf.execute(n, e.keySize, e.ivSize);
|
||||
r.iv = o.iv;
|
||||
var a = m.encrypt.call(this, e, t, o.key, r);
|
||||
return a.mixIn(o),
|
||||
a
|
||||
},
|
||||
decrypt: function (e, t, n, r) {
|
||||
r = this.cfg.extend(r),
|
||||
t = this._parse(t, r.format);
|
||||
var o = r.kdf.execute(n, e.keySize, e.ivSize, t.salt);
|
||||
return r.iv = o.iv,
|
||||
m.decrypt.call(this, e, t, o.key, r)
|
||||
}
|
||||
})
|
||||
}()
|
||||
}(JO.exports);
|
||||
|
||||
var xM = {
|
||||
exports: {}
|
||||
};
|
||||
xM.exports = function (e) {
|
||||
return function () {
|
||||
var t = e
|
||||
, n = t.lib.BlockCipher
|
||||
, r = t.algo
|
||||
, o = []
|
||||
, a = []
|
||||
, i = []
|
||||
, l = []
|
||||
, s = []
|
||||
, u = []
|
||||
, c = []
|
||||
, d = []
|
||||
, p = []
|
||||
, f = [];
|
||||
!function () {
|
||||
for (var e = [], t = 0; t < 256; t++)
|
||||
e[t] = t < 128 ? t << 1 : t << 1 ^ 283;
|
||||
var n = 0
|
||||
, r = 0;
|
||||
for (t = 0; t < 256; t++) {
|
||||
var h = r ^ r << 1 ^ r << 2 ^ r << 3 ^ r << 4;
|
||||
h = h >>> 8 ^ 255 & h ^ 99,
|
||||
o[n] = h,
|
||||
a[h] = n;
|
||||
var g = e[n]
|
||||
, v = e[g]
|
||||
, m = e[v]
|
||||
, y = 257 * e[h] ^ 16843008 * h;
|
||||
i[n] = y << 24 | y >>> 8,
|
||||
l[n] = y << 16 | y >>> 16,
|
||||
s[n] = y << 8 | y >>> 24,
|
||||
u[n] = y,
|
||||
y = 16843009 * m ^ 65537 * v ^ 257 * g ^ 16843008 * n,
|
||||
c[h] = y << 24 | y >>> 8,
|
||||
d[h] = y << 16 | y >>> 16,
|
||||
p[h] = y << 8 | y >>> 24,
|
||||
f[h] = y,
|
||||
n ? (n = g ^ e[e[e[m ^ g]]],
|
||||
r ^= e[e[r]]) : n = r = 1
|
||||
}
|
||||
}();
|
||||
var h = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
|
||||
, g = r.AES = n.extend({
|
||||
_doReset: function () {
|
||||
if (!this._nRounds || this._keyPriorReset !== this._key) {
|
||||
for (var e = this._keyPriorReset = this._key, t = e.words, n = e.sigBytes / 4, r = 4 * ((this._nRounds = n + 6) + 1), a = this._keySchedule = [], i = 0; i < r; i++)
|
||||
i < n ? a[i] = t[i] : (u = a[i - 1],
|
||||
i % n ? n > 6 && i % n == 4 && (u = o[u >>> 24] << 24 | o[u >>> 16 & 255] << 16 | o[u >>> 8 & 255] << 8 | o[255 & u]) : (u = o[(u = u << 8 | u >>> 24) >>> 24] << 24 | o[u >>> 16 & 255] << 16 | o[u >>> 8 & 255] << 8 | o[255 & u],
|
||||
u ^= h[i / n | 0] << 24),
|
||||
a[i] = a[i - n] ^ u);
|
||||
for (var l = this._invKeySchedule = [], s = 0; s < r; s++) {
|
||||
if (i = r - s,
|
||||
s % 4)
|
||||
var u = a[i];
|
||||
else
|
||||
u = a[i - 4];
|
||||
l[s] = s < 4 || i <= 4 ? u : c[o[u >>> 24]] ^ d[o[u >>> 16 & 255]] ^ p[o[u >>> 8 & 255]] ^ f[o[255 & u]]
|
||||
}
|
||||
}
|
||||
},
|
||||
encryptBlock: function (e, t) {
|
||||
this._doCryptBlock(e, t, this._keySchedule, i, l, s, u, o)
|
||||
},
|
||||
decryptBlock: function (e, t) {
|
||||
var n = e[t + 1];
|
||||
e[t + 1] = e[t + 3],
|
||||
e[t + 3] = n,
|
||||
this._doCryptBlock(e, t, this._invKeySchedule, c, d, p, f, a),
|
||||
n = e[t + 1],
|
||||
e[t + 1] = e[t + 3],
|
||||
e[t + 3] = n
|
||||
},
|
||||
_doCryptBlock: function (e, t, n, r, o, a, i, l) {
|
||||
for (var s = this._nRounds, u = e[t] ^ n[0], c = e[t + 1] ^ n[1], d = e[t + 2] ^ n[2], p = e[t + 3] ^ n[3], f = 4, h = 1; h < s; h++) {
|
||||
var g = r[u >>> 24] ^ o[c >>> 16 & 255] ^ a[d >>> 8 & 255] ^ i[255 & p] ^ n[f++]
|
||||
, v = r[c >>> 24] ^ o[d >>> 16 & 255] ^ a[p >>> 8 & 255] ^ i[255 & u] ^ n[f++]
|
||||
, m = r[d >>> 24] ^ o[p >>> 16 & 255] ^ a[u >>> 8 & 255] ^ i[255 & c] ^ n[f++]
|
||||
, y = r[p >>> 24] ^ o[u >>> 16 & 255] ^ a[c >>> 8 & 255] ^ i[255 & d] ^ n[f++];
|
||||
u = g,
|
||||
c = v,
|
||||
d = m,
|
||||
p = y
|
||||
}
|
||||
g = (l[u >>> 24] << 24 | l[c >>> 16 & 255] << 16 | l[d >>> 8 & 255] << 8 | l[255 & p]) ^ n[f++],
|
||||
v = (l[c >>> 24] << 24 | l[d >>> 16 & 255] << 16 | l[p >>> 8 & 255] << 8 | l[255 & u]) ^ n[f++],
|
||||
m = (l[d >>> 24] << 24 | l[p >>> 16 & 255] << 16 | l[u >>> 8 & 255] << 8 | l[255 & c]) ^ n[f++],
|
||||
y = (l[p >>> 24] << 24 | l[u >>> 16 & 255] << 16 | l[c >>> 8 & 255] << 8 | l[255 & d]) ^ n[f++],
|
||||
e[t] = g,
|
||||
e[t + 1] = v,
|
||||
e[t + 2] = m,
|
||||
e[t + 3] = y
|
||||
},
|
||||
keySize: 8
|
||||
});
|
||||
t.AES = n._createHelper(g)
|
||||
}(),
|
||||
e.AES
|
||||
}(JO.exports);
|
||||
|
||||
|
||||
var OM = qO.exports = JO.exports;
|
||||
|
||||
function enc(data, key) {
|
||||
return OM.AES.encrypt(data, key).toString()
|
||||
}
|
||||
|
||||
""";
|
||||
}
|
||||
|
||||
@@ -8,6 +8,11 @@ import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static cn.qaiu.util.AESUtils.encrypt;
|
||||
|
||||
/**
|
||||
* 执行Js脚本
|
||||
*
|
||||
@@ -81,12 +86,24 @@ public class JsExecUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static String mgEncData(String data, String key) {
|
||||
try {
|
||||
return executeOtherJs(JsContent.mgJS, "enc", data, key).toString();
|
||||
} catch (ScriptException | NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// return OM.AES.encrypt('{"copyrightId":"6326951FKBL","type":1,"auditionsFlag":0}',
|
||||
// '4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e').toString()
|
||||
//
|
||||
|
||||
public static void main(String[] args) {
|
||||
//encrypt("ZYcEEs2JdncXG8zAaytJiXxmbyhH2wxb", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324")
|
||||
// 1a9b1a33222a78d6506e0aeaacf5b9b69984954de79e98e3ef4766c009025b7000000000
|
||||
// acb0a82caa6ee641ca99ad81ace7081f58412e2148619827aa0a038a8d76c75000000000
|
||||
// f7a05b893131238ee4d1f31a85401b64056bb09988b5b9c2b87c12542578360600000000
|
||||
System.out.println(getKwSign("c7nkKBeXXzCyTQ8Wc8DRNYc4Th3f6hTE", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324"));
|
||||
System.out.println(URLEncoder
|
||||
.encode(mgEncData("{\"copyrightId\":\"6326951FKBL\",\"type\":1,\"auditionsFlag\":0}", AESUtils.MG_KEY), StandardCharsets.UTF_8));
|
||||
|
||||
// U2FsdGVkX1/UiZC91ImQvQY7qDBSEbTykAcVoARiquibPCZhWSs3kWQw3j2PNme5wNLqt2oau498ni1hgjGFuxwORnkk6x9rzk/X0arElUo=
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,11 @@ public class TestAESUtil {
|
||||
@Test
|
||||
public void decode() throws NoSuchPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException,
|
||||
BadPaddingException, InvalidKeyException {
|
||||
String hex = AESUtils.encryptHexByAES("1686215935703", AESUtils.CIPHER_AES2);
|
||||
String hex = AESUtils.encryptBase64ByAES("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8asrfSaoOb4je+DSmKdriQJKW\n" +
|
||||
"VJ2oDZrs3wi5W67m3LwTB9QVR+cE3XWU21Nx+YBxS0yun8wDcjgQvYt625ZCcgin\n" +
|
||||
"2ro/eOkNyUOTBIbuj9CvMnhUYiR61lC1f1IGbrSYYimqBVSjpifVufxtx/I3exRe\n" +
|
||||
"ZosTByYp4Xwpb1+WAQIDAQAB", AESUtils.CIPHER_AES2);
|
||||
System.out.println(hex);
|
||||
Assert.assertEquals("B4C5B9833113ACA41F16AABADE17349C", hex.toUpperCase());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user