diff --git a/package-lock.json b/package-lock.json index 8151a5e..c547646 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "sdenv": "^0.2.2", "sdenv-extend": "^1.3.1", "sdenv-jsdom": "^1.1.0", + "sm-crypto": "^0.3.13", "winston": "^3.14.2" } }, @@ -3339,6 +3340,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4548,6 +4554,14 @@ "node": ">=8" } }, + "node_modules/sm-crypto": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz", + "integrity": "sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w==", + "dependencies": { + "jsbn": "^1.1.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index 0da7e38..7d6f0df 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "sdenv": "^0.2.2", "sdenv-extend": "^1.3.1", "sdenv-jsdom": "^1.1.0", + "sm-crypto": "^0.3.13", "winston": "^3.14.2" } } diff --git a/routes/Sm4.js b/routes/Sm4.js index 1ab113d..adbe9f4 100644 --- a/routes/Sm4.js +++ b/routes/Sm4.js @@ -13,8 +13,9 @@ router.post('/getKey', async (req, res) => { let start = new Date(); try { // 执行 - let key = sm4Service.getKey(); - res.status(200).send(key); + let resKey = sm4Service.getKey(); + console.log(`${uuid};sm4.getKey 返回: ${resKey}`) + res.status(200).send(resKey); } catch (e) { console.error(e.stack) return res.status(500).send(e.message) @@ -25,12 +26,14 @@ router.post('/getKey', async (req, res) => { router.post('/sm4Encrypt', async (req, res) => { let uuid = UUIDUtil.uuid; - + let data = req.body.data + let key = req.body.key let start = new Date(); try { // 执行 - let key = sm4Service.sm4Encrypt(); - res.status(200).send(key); + let resKey = sm4Service.sm4Encrypt(data, key); + console.log(`${uuid};sm4.sm4Encrypt 返回: ${resKey}`) + res.status(200).send(resKey); } catch (e) { console.error(e.stack) return res.status(500).send(e.message) @@ -41,12 +44,14 @@ router.post('/sm4Encrypt', async (req, res) => { router.post('/sm4Decrypt', async (req, res) => { let uuid = UUIDUtil.uuid; - + let data = req.body.data + let key = req.body.key let start = new Date(); try { // 执行 - let key = sm4Service.sm4Decrypt(); - res.status(200).send(key); + let resKey = sm4Service.sm4Decrypt(data, key); + console.log(`${uuid};sm4.sm4Decrypt 返回: ${resKey}`) + res.status(200).send(resKey); } catch (e) { console.error(e.stack) return res.status(500).send(e.message) @@ -57,12 +62,14 @@ router.post('/sm4Decrypt', async (req, res) => { router.post('/getSign', async (req, res) => { let uuid = UUIDUtil.uuid; - + let data = req.body.data + let key = req.body.key let start = new Date(); try { // 执行 - let key = sm4Service.getSign(); - res.status(200).send(key); + let resKey = sm4Service.getSign(data, key); + console.log(`${uuid};sm4.getSign 返回: ${resKey}`) + res.status(200).send(resKey); } catch (e) { console.error(e.stack) return res.status(500).send(e.message) @@ -71,19 +78,23 @@ router.post('/getSign', async (req, res) => { } }) -router.post('/toHex', async (req, res) => { - let uuid = UUIDUtil.uuid; +router.post('/getSm2', async (req, res) => { + let uuid = UUIDUtil.uuid; + let key = req.body.key + let publicKey = req.body.publicKey + let mode = req.body.mode let start = new Date(); try { // 执行 - let key = sm4Service.toHex(); - res.status(200).send(key); + let resKey = sm4Service.getSm2(key, publicKey, mode); + console.log(`${uuid};sm4.getSm2 返回: ${resKey}`) + res.status(200).send(resKey); } catch (e) { console.error(e.stack) return res.status(500).send(e.message) } finally { - console.log(`${uuid};getSign ${new Date() - start} ms`) + console.log(`${uuid};getSm2 ${new Date() - start} ms`) } }) diff --git a/routes/service/FpService.js b/routes/service/FpService.js index 6309a1d..230e0cf 100644 --- a/routes/service/FpService.js +++ b/routes/service/FpService.js @@ -73,7 +73,7 @@ class FpService { los["headers"] = headers['security-mes-key'] los["cookies"] = cookieJar.getCookieStringSync(baseUrl); - console.log('js执行完成,返回结果 ', los) + console.log('js执行完成,返回结果 ', JSON.stringify(los)) // 关闭 dom.window.close() console.timeEnd('los生成时长') diff --git a/routes/service/Sm4Service.js b/routes/service/Sm4Service.js index 21a5a95..69b457d 100644 --- a/routes/service/Sm4Service.js +++ b/routes/service/Sm4Service.js @@ -1,6 +1,6 @@ -const CryptoJS = require('crypto-js'); -const {encrypt, decrypt, A} = require('./static/sm4'); +const {encrypt, decrypt,getSign, getKey, sm2} = require('./static/sm4'); + class Sm4Service { sm4Encrypt(data, key) { @@ -12,19 +12,15 @@ class Sm4Service { } getKey() { - return A(); + return getKey(); } getSign(data, key) { - var HmacSHA256 = CryptoJS.HmacSHA256(data, key) - return CryptoJS.enc.Hex.stringify(HmacSHA256); + return getSign(data, key) } - toHex(e) { - for (var t = "", n = 0; n < e.length; n++) { - "" === t ? t = e.charCodeAt(n).toString(16) : t += e.charCodeAt(n).toString(16); - } - return t + getSm2(key, publicKey,mode){ + return sm2(key, publicKey,mode) } } diff --git a/routes/service/static/fp/chunk-npjg4qgmmrfrjl3r.js b/routes/service/static/fp/chunk-npjg4qgmmrfrjl3r.js index a615344..7b308c5 100644 --- a/routes/service/static/fp/chunk-npjg4qgmmrfrjl3r.js +++ b/routes/service/static/fp/chunk-npjg4qgmmrfrjl3r.js @@ -2982,6 +2982,7 @@ logger = console.info; for (var _0x4cdb1f in _0x308b47["headers"]) { _0x4b8bab["setRequestHeader"](_0x4cdb1f, _0x308b47["headers"][_0x4cdb1f]); } + logger('xhr 请求 ? 返回:', _0x4b8bab) _0x4b8bab["send"](_0x308b47["body"]); }), _0x2da805 = _0x2e5698(function (_0x486e47) { logger('xhr 请求 ? 返回:', _0x486e47) @@ -3823,7 +3824,7 @@ logger = console.info; _0x5fd65d = new _0x2c2f9a[("BigInteger")](_0x20430d["toString"]("hex"), 16)["xor"](new _0x2c2f9a["BigInteger"](_0x2b932f["toString"]("hex"), 16))["toString"](16), _0x1e6951 = _0x523d76(_0x21a9eb + _0x5fd65d + _0x544b37, "hex", "hex") === _0x454060["toString"]("hex") ? _0xe54f04["lW"]["from"](_0x5fd65d, "hex") : _0xe54f04["lW"]["alloc"](0); var res = _0x38d0f4 ? _0x1e6951["toString"](_0x38d0f4) : _0x497813()(_0x1e6951); - logger('decrypt 结果 ', res) + logger('decrypt 结果 ', res, 123) return res; } }, @@ -4496,7 +4497,7 @@ logger = console.info; } ["returnCurrentFunction"]() { - logger('into returnCurrentFunction') + // logger('into returnCurrentFunction') const _0x42bd34 = this['stack'], _0x545515 = this['fp']; this['fp'] = _0x42bd34[_0x545515], this['ip'] = _0x42bd34[_0x545515 - (1)], this['sp'] = _0x545515 - _0x42bd34[_0x545515 - (2)] - (4), this["stack"]["splice"](this['sp'] + (1)), this["callingFunctionInfo"]["returnValue"] === _0x43707b && (this['stack'][0] = undefined), this["allThis"]["pop"](), this["currentThis"] = this['allThis'][this["allThis"]['length'] - (1)], this["callingFunctionInfos"]["pop"](), this["callingFunctionInfo"] = this["callingFunctionInfos"][this.callingFunctionInfos.length - (1)]; // logger('123123123',this["callingFunctionInfos"]) @@ -4599,7 +4600,7 @@ logger = console.info; return _0x51aa8e; } if (_0x262507) { - logger('callFunction 执行方法', _0x3bed74, _0x262507) + // logger('callFunction 执行方法', _0x3bed74, _0x262507) } !_0x4b5a8d ? _0x2f055c[0] = _0x18661b ? new _0x335804[_0x3bed74](..._0x262507) : _0x335804[_0x3bed74](..._0x262507) : _0x2f055c[0] = _0x18661b ? new _0x38bafa(..._0x262507) : _0x38bafa(..._0x262507), this["stack"]["splice"](this["sp"] + (1)); } @@ -5045,7 +5046,7 @@ logger = console.info; constructor() { this["sm3hash"] = _0x532197 => { _0x532197 = this["bs5"](_0x532197), _0x532197 = _0x1f11de["digest"](_0x532197, "utf8", "hex"), _0x532197; - logger('sm3hash ', _0x532197) + // logger('sm3hash ', _0x532197) return _0x532197 } this["sha1hash"] = _0x5993d3 => { @@ -5084,7 +5085,7 @@ logger = console.info; } this["bs5"] = _0xa129df => { var res = _0x27cd99["instance"]["hex_md5"](_0xa129df); - logger('bs5 处理结果', res) + // logger('bs5 处理结果', res) return res; } this["setCookie"] = (_0x53def9, _0x2a3574, _0x3d869c) => { @@ -5165,7 +5166,7 @@ logger = console.info; var _0x13f88b = _0x475ce7["content"]; logger('1.获取meta标签 _y_ds', _0x13f88b) var _0x4a87cf = _0x2c29b1(_0x13f88b, window); - logger('2.获取密钥', _0x4a87cf) + logger('2.获取密钥', _0x4a87cf,123) if (_0x4a87cf == null) { return; } @@ -5269,14 +5270,14 @@ logger = console.info; _0x301e1d += 1; if (_0x301e1d < _0x58a6ec) { var _0x37ef08 = _0x419cba['response']; - debugger + debugger _0x419cba["config"]['xhr']['responseType'] == 'blob' && (_0x37ef08 = yield _0x15b842(_0x37ef08)); var _0x38cce1 = JSON["parse"](_0x37ef08)['data']; window['enc_flag'] = JSON["parse"](_0x37ef08)["e"], window['ycbz'] = JSON["parse"](_0x37ef08)["y"], window['gTcARqnea5KV'] = parseInt(JSON['parse'](_0x37ef08)["t"]); - if (_0x38cce1 != undefined) { - const _0x5db747 = _0x2c29b1(_0x38cce1, window); - _0x5db747 != null && _0x5db747['run'](), _0x20a97d(_0x419cba, 0); - } + if (_0x38cce1 != undefined) { + const _0x5db747 = _0x2c29b1(_0x38cce1, window); + _0x5db747 != null && _0x5db747['run'](), _0x20a97d(_0x419cba, 0); + } } else _0x301e1d = 0, _0x134927['next'](_0x419cba); } else { if (_0x47b2e5 == '418') { diff --git a/routes/service/static/sm4.js b/routes/service/static/sm4.js index a982adf..2887727 100644 --- a/routes/service/static/sm4.js +++ b/routes/service/static/sm4.js @@ -1,155 +1,316 @@ -function A() { - var d = ""; - return d = r(16, 61), d + +const CryptoJS = require('crypto-js'); + +const sm = require('sm-crypto').sm2; + +function sm4encrypt(data, key) { + + return encrypt(data, key); + } -function r(e, t) { - var n, a, i = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), r = []; - if (t = t || i.length, e) { - for (n = 0; n < e; n++) { - r[n] = i[0 | Math.random() * t]; - } - } else { - for (r[8] = r[13] = r[18] = r[23] = "-", r[14] = "4", n = 0; n < 36; n++) { - r[n] || (a = 0 | 16 * Math.random(), r[n] = i[19 == n ? 3 & a | 8 : a]); - } - } - return r.join("") +function sm4decrypt(data, key) { + + return decrypt(data, key); + } function c(t) { - let e = []; - let n = 0; - let r = t.length; - for (; n < r; n += 2) { + + for (var e = [], n = 0, r = t.length; n < r; n += 2) + e.push(parseInt(t.substr(n, 2), 16)); - } + return e + } function f(t) { + return t.map((function (t) { - return t = t.toString(16), 1 === t.length ? "0" + t : t - } + + return t = t.toString(16), + + 1 === t.length ? "0" + t : t + + } + )).join("") + } function l(t) { + for (var e = [], n = 0, r = t.length; n < r; n++) { + var i = t.codePointAt(n); - if (i <= 127) { + + if (i <= 127) + e.push(i); - } else if (i <= 2047) { - e.push(192 | i >>> 6), e.push(128 | 63 & i); - } else if (i <= 55295 || i >= 57344 && i <= 65535) { - e.push(224 | i >>> 12), e.push(128 | i >>> 6 & 63), e.push(128 | 63 & i); - } else { - if (!(i >= 65536 && i <= 1114111)) { - throw e.push(i), new Error("input is not supported"); - } - n++, e.push(240 | i >>> 18 & 28), e.push(128 | i >>> 12 & 63), e.push(128 | i >>> 6 & 63), e.push(128 | 63 & i) + + else if (i <= 2047) + + e.push(192 | i >>> 6), + + e.push(128 | 63 & i); + + else if (i <= 55295 || i >= 57344 && i <= 65535) + + e.push(224 | i >>> 12), + + e.push(128 | i >>> 6 & 63), + + e.push(128 | 63 & i); + + else { + + if (!(i >= 65536 && i <= 1114111)) + + throw e.push(i), + + new Error("input is not supported"); + + n++, + + e.push(240 | i >>> 18 & 28), + + e.push(128 | i >>> 12 & 63), + + e.push(128 | i >>> 6 & 63), + + e.push(128 | 63 & i) + } + } + return e + } function h(t) { - for (var e = [], n = 0, r = t.length; n < r; n++) { - t[n] >= 240 && t[n] <= 247 ? (e.push(String.fromCodePoint(((7 & t[n]) << 18) + ((63 & t[n + 1]) << 12) + ((63 & t[n + 2]) << 6) + (63 & t[n + 3]))), n += 3) : t[n] >= 224 && t[n] <= 239 ? (e.push(String.fromCodePoint(((15 & t[n]) << 12) + ((63 & t[n + 1]) << 6) + (63 & t[n + 2]))), n += 2) : t[n] >= 192 && t[n] <= 223 ? (e.push(String.fromCodePoint(((31 & t[n]) << 6) + (63 & t[n + 1]))), n++) : e.push(String.fromCodePoint(t[n])); - } + + for (var e = [], n = 0, r = t.length; n < r; n++) + + t[n] >= 240 && t[n] <= 247 ? (e.push(String.fromCodePoint(((7 & t[n]) << 18) + ((63 & t[n + 1]) << 12) + ((63 & t[n + 2]) << 6) + (63 & t[n + 3]))), + + n += 3) : t[n] >= 224 && t[n] <= 239 ? (e.push(String.fromCodePoint(((15 & t[n]) << 12) + ((63 & t[n + 1]) << 6) + (63 & t[n + 2]))), + + n += 2) : t[n] >= 192 && t[n] <= 223 ? (e.push(String.fromCodePoint(((31 & t[n]) << 6) + (63 & t[n + 1]))), + + n++) : e.push(String.fromCodePoint(t[n])); + return e.join("") + } function d(t, e) { + return t << e | t >>> 32 - e + } function p(t) { + var s = [214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153, 156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98, 228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166, 71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168, 104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53, 30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135, 212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158, 234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161, 224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227, 29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111, 213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81, 141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216, 10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176, 137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132, 24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72]; + return (255 & s[t >>> 24 & 255]) << 24 | (255 & s[t >>> 16 & 255]) << 16 | (255 & s[t >>> 8 & 255]) << 8 | 255 & s[255 & t] + } function v(t) { + return t ^ d(t, 2) ^ d(t, 10) ^ d(t, 18) ^ d(t, 24) + } function y(t) { + return t ^ d(t, 13) ^ d(t, 23) + } function g(t, e, n) { - for (var r = new Array(4), i = new Array(4), o = 0; o < 4; o++) { - i[0] = 255 & t[0 + 4 * o], i[1] = 255 & t[1 + 4 * o], i[2] = 255 & t[2 + 4 * o], i[3] = 255 & t[3 + 4 * o], r[o] = i[0] << 24 | i[1] << 16 | i[2] << 8 | i[3]; - } - for (var a, s = 0; s < 32; s += 4) { - a = r[1] ^ r[2] ^ r[3] ^ n[s + 0], r[0] ^= v(p(a)), a = r[2] ^ r[3] ^ r[0] ^ n[s + 1], r[1] ^= v(p(a)), a = r[3] ^ r[0] ^ r[1] ^ n[s + 2], r[2] ^= v(p(a)), a = r[0] ^ r[1] ^ r[2] ^ n[s + 3], r[3] ^= v(p(a)); - } - for (var u = 0; u < 16; u += 4) { - e[u] = r[3 - u / 4] >>> 24 & 255, e[u + 1] = r[3 - u / 4] >>> 16 & 255, e[u + 2] = r[3 - u / 4] >>> 8 & 255, e[u + 3] = 255 & r[3 - u / 4] - } + for (var r = new Array(4), i = new Array(4), o = 0; o < 4; o++) + + i[0] = 255 & t[0 + 4 * o], + + i[1] = 255 & t[1 + 4 * o], + + i[2] = 255 & t[2 + 4 * o], + + i[3] = 255 & t[3 + 4 * o], + + r[o] = i[0] << 24 | i[1] << 16 | i[2] << 8 | i[3]; + + for (var a, s = 0; s < 32; s += 4) + + a = r[1] ^ r[2] ^ r[3] ^ n[s + 0], + + r[0] ^= v(p(a)), + + a = r[2] ^ r[3] ^ r[0] ^ n[s + 1], + + r[1] ^= v(p(a)), + + a = r[3] ^ r[0] ^ r[1] ^ n[s + 2], + + r[2] ^= v(p(a)), + + a = r[0] ^ r[1] ^ r[2] ^ n[s + 3], + + r[3] ^= v(p(a)); + + for (var u = 0; u < 16; u += 4) + + e[u] = r[3 - u / 4] >>> 24 & 255, + + e[u + 1] = r[3 - u / 4] >>> 16 & 255, + + e[u + 2] = r[3 - u / 4] >>> 8 & 255, + + e[u + 3] = 255 & r[3 - u / 4] + } function m(t, e, n) { + var i = 0; + var u = [462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257]; - for (var r = new Array(4), o = new Array(4), a = 0; a < 4; a++) { - o[0] = 255 & t[0 + 4 * a], o[1] = 255 & t[1 + 4 * a], o[2] = 255 & t[2 + 4 * a], o[3] = 255 & t[3 + 4 * a], r[a] = o[0] << 24 | o[1] << 16 | o[2] << 8 | o[3]; - } - r[0] ^= 2746333894, r[1] ^= 1453994832, r[2] ^= 1736282519, r[3] ^= 2993693404; + for (var r = new Array(4), o = new Array(4), a = 0; a < 4; a++) - for (var s, c = 0; c < 32; c += 4) { - s = r[1] ^ r[2] ^ r[3] ^ u[c + 0], e[c + 0] = r[0] ^= y(p(s)), s = r[2] ^ r[3] ^ r[0] ^ u[c + 1], e[c + 1] = r[1] ^= y(p(s)), s = r[3] ^ r[0] ^ r[1] ^ u[c + 2], e[c + 2] = r[2] ^= y(p(s)), s = r[0] ^ r[1] ^ r[2] ^ u[c + 3], e[c + 3] = r[3] ^= y(p(s)); - } + o[0] = 255 & t[0 + 4 * a], + + o[1] = 255 & t[1 + 4 * a], + + o[2] = 255 & t[2 + 4 * a], + + o[3] = 255 & t[3 + 4 * a], + + r[a] = o[0] << 24 | o[1] << 16 | o[2] << 8 | o[3]; + + r[0] ^= 2746333894, + + r[1] ^= 1453994832, + + r[2] ^= 1736282519, + + r[3] ^= 2993693404; + + for (var s, c = 0; c < 32; c += 4) + + s = r[1] ^ r[2] ^ r[3] ^ u[c + 0], + + e[c + 0] = r[0] ^= y(p(s)), + + s = r[2] ^ r[3] ^ r[0] ^ u[c + 1], + + e[c + 1] = r[1] ^= y(p(s)), + + s = r[3] ^ r[0] ^ r[1] ^ u[c + 2], + + e[c + 2] = r[2] ^= y(p(s)), + + s = r[0] ^ r[1] ^ r[2] ^ u[c + 3], + + e[c + 3] = r[3] ^= y(p(s)); if (n === i) - for (var f, l = 0; l < 16; l++) { - f = e[l], e[l] = e[31 - l], e[31 - l] = f - } + + for (var f, l = 0; l < 16; l++) + + f = e[l], + + e[l] = e[31 - l], + + e[31 - l] = f + } function encrypt(t, e, n) { + return b(t, e, 1, n) + } function decrypt(t, e, n) { + return b(t, e, 0, n) + } function b(t, e, n) { + var o = 32; + var a = 16; + var i = 0; - var s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, u = s.padding, - d = void 0 === u ? "pkcs#5" : u, p = (s.mode, s.output), v = void 0 === p ? "string" : p; - if ("string" === typeof e && (e = c(e)), 16 !== e.length) { + + var s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {} + + , u = s.padding + + , d = void 0 === u ? "pkcs#5" : u + + , p = (s.mode, + + s.output) + + , v = void 0 === p ? "string" : p; + + if ("string" === typeof e && (e = c(e)), + + 16 !== e.length) + throw new Error("key is invalid"); - } - if (t = "string" === typeof t ? n !== i ? l(t) : c(t) : r(t), "pkcs#5" === d && n !== i) { - for (var y = a - t.length % a, b = 0; b < y; b++) { + if (t = "string" === typeof t ? n !== i ? l(t) : c(t) : r(t), + + "pkcs#5" === d && n !== i) + + for (var y = a - t.length % a, b = 0; b < y; b++) + t.push(y); - } - } var _ = new Array(o); m(e, _, n); - var w = [], x = t.length, k = 0; + var w = [] + + , x = t.length + + , k = 0; + while (x >= a) { - var A = t.slice(k, k + 16), S = new Array(16); + + var A = t.slice(k, k + 16) + + , S = new Array(16); + g(A, S, _); - for (var O = 0; O < a; O++) { + + for (var O = 0; O < a; O++) + w[k + O] = S[O]; - } - x -= a, k += a + + x -= a, + + k += a + } if ("pkcs#5" === d && n === i) { + var E = w[w.length - 1]; + w.splice(w.length - E, E) + } return "array" !== v ? n !== i ? f(w) : h(w) : w @@ -157,43 +318,166 @@ function b(t, e, n) { } -// function sm2(jiamistr, publicKey, cipherMode) { -// return sm.doEncrypt(jiamistr, publicKey, cipherMode); -// } + + + + + +function getKey() { + + const key = A().substring(0, 8) + '^bfrgM2R'; + + + + function A() { + + var d = ""; + + return d = r(16, 61), + + d + + } + + + + function r(e, t) { + + var n, a, i = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), r = []; + + if (t = t || i.length, + + e) + + for (n = 0; n < e; n++) + + r[n] = i[0 | Math.random() * t]; + + else + + for (r[8] = r[13] = r[18] = r[23] = "-", + + r[14] = "4", + + n = 0; n < 36; n++) + + r[n] || (a = 0 | 16 * Math.random(), + + r[n] = i[19 == n ? 3 & a | 8 : a]); + + return r.join("") + + } + + return key; + +} + +function getSign(data, key) { + + var data = CryptoJS.HmacSHA256(data, key) + + var datas = CryptoJS.enc.Hex.stringify(data); + + return datas; + +} + +function u(e) { + + for (var t = "", n = 0; n < e.length; n++) + + "" === t ? t = e.charCodeAt(n).toString(16) : t += e.charCodeAt(n).toString(16); + + return t + +} + + + +function sm2(jiamistr, publicKey, cipherMode) { + + return sm.doEncrypt(jiamistr, publicKey, cipherMode); + +} + function De(t, e) { + var n, c = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(""), u = []; - if (e = e || c.length, t) { - for (n = 0; QQfZW(n, t); n++) { + + if (e = e || c.length, + + t) + + for (n = 0; QQfZW(n, t); n++) + u[n] = c[uApus(0, YcWyY(Math["random"](), e))]; - } - } + return u["join"]("") + } function QQfZW(t, e) { + return HpDDW(t, e) + } function HpDDW(t, e) { + return t < e + } function uApus(t, e) { + return Xefio(t, e) + } function Xefio(t, e) { + return t | e + } function YcWyY(t, e) { + return wlgCa(t, e) + } function wlgCa(t, e) { + return t * e + } -module.exports = {encrypt, decrypt, A} \ No newline at end of file + + +//function aes(option, data, key, iv = '', outputEncoding = 'Base64', padding = 'Pkcs7', inputEncoding = 'Utf8') { + +// let data = `${De(32)}${data}`; + +// key = CryptoJS.enc[inputEncoding].parse(key); + +// data = CryptoJS.enc[inputEncoding].parse(data); + +// const encrypted = CryptoJS.AES.encrypt(data, key, { + +// iv, + +// mode: CryptoJS.mode[option], + +// padding: CryptoJS.pad[padding], + +// }); + +// outputEncoding = outputEncoding.replace(outputEncoding[0], outputEncoding[0].toUpperCase()); + +// return CryptoJS.enc[outputEncoding].stringify(encrypted.ciphertext); + +//} +module.exports = {encrypt, decrypt,getSign, getKey, sm2} \ No newline at end of file diff --git a/test/fp/invoice-business.html b/test/fp/invoice-business.html index 7657c30..9bdc750 100644 --- a/test/fp/invoice-business.html +++ b/test/fp/invoice-business.html @@ -1,45 +1,45 @@ -纳税人端WEB应用
纳税人端WEB应用
\ No newline at end of file + } + })(); \ No newline at end of file diff --git a/test/fp/test_fp_getpublickey.js b/test/fp/test_fp_getpublickey.js new file mode 100644 index 0000000..7219658 --- /dev/null +++ b/test/fp/test_fp_getpublickey.js @@ -0,0 +1,29 @@ +const {jsdomFromText, browser} = require("sdenv"); +const {Script} = require("node:vm"); +const fs = require("node:fs"); +const FpService = require("../../routes/service/FpService"); + + +var baseUrl = 'https://dppt.chongqing.chinatax.gov.cn:8443' +// TODO 需要文件内的 meta name="_y_ds" content 标签内容 +var html = fs.readFileSync('./invoice-business.html', 'utf8').toString(); +let js = fs.readFileSync('./chunk-npjg4qgmmrfrjl3r.js', 'utf8').toString(); + +// TODO:用户登陆token 测试时需要替换 + +var loginCookieStr = "DTSwUOYx7MiWN=7e88fe43ab4646ecd1ad371afad13256ad01e77a9057730b343745ca296f285f" + +fpService = new FpService() + + +var url = "https://dppt.chongqing.chinatax.gov.cn:8443/szzhzz/cssSecurity/v1/getPublicKey?t="+ new Date().getTime() +// TODO:如果有 param 加密后得到 enParam +var enParam = "" +// get_los(url, enParam); + +get_los() + +async function get_los() { + let los = await fpService.get_los(url, + {}, html, loginCookieStr, ""); +} \ No newline at end of file