ajax的请求解密

  $.ajax({
                            url: i,
                            dataType: "json",
                            success: function(e) {
                                r.decompressAndDeobfuscateData(e, w).then((e=>{
                                    if (!(e = JSON.parse(e))[0].series[0].serie.data[0])
                                        return t(!0);
                                    e = r.transformData(e),
                                    I && console.log("result:", e);解释每一行代码

返回的数据时密文,逐个跟栈,最后找到这行代码,在前面打断点,可以发现解密部分就在这里。

这是很常见的写法,每一行代码的含义分别为。

这段代码是一个 AJAX 请求,用于获取 JSON 数据。让我来逐行解释:

  1. $.ajax({: 这是 jQuery 中用于发起 AJAX 请求的方法。

  2. url: i,: 这里的 i 应该是一个变量,表示请求的 URL。该行指定了请求的 URL。

  3. dataType: "json",: 这表示预期从服务器返回的数据类型是 JSON 格式。

  4. success: function(e) {: 这是一个回调函数,当请求成功完成时执行。参数 e 是从服务器返回的数据。

  5. r.decompressAndDeobfuscateData(e, w).then((e=>{: 这里调用了 decompressAndDeobfuscateData 函数,传递了两个参数 ew。这个函数是一个异步函数,因此在成功解密数据后,使用 then() 方法执行一个回调函数。

  6. if (!(e = JSON.parse(e))[0].series[0].serie.data[0]): 这里首先将返回的 JSON 数据解析为对象 e。然后,检查对象中特定路径上的数据是否存在。如果数据不存在,可能会执行 t(!0),但是在提供的代码片段中,缺少了这一部分。

  7. e = r.transformData(e),: 如果数据存在,将调用 r.transformData 对数据进行进一步处理。

  8. I && console.log("result:", e);: 这里条件地(I &&)使用 console.log 输出处理后的数据。I 可能是一个全局变量,如果为真,则会执行 console.log

请注意,给定的代码片段中缺少了一些上下文信息,特别是在条件 if (!(e = JSON.parse(e))[0].series[0].serie.data[0]) 中的 t(!0)。此外,变量 rwIt 的定义也不明确,可能是在其他地方定义的。

解密函数decompressAndDeobfuscateData的完整代码:

decompressAndDeobfuscateData: async function(e, t) {
                    try {
                        const a = await async function(e, t) {
                            let a = atob(e)
                              , i = new Uint8Array(a.length);
                            for (let e = 0; e < a.length; e++)
                                i[e] = a.charCodeAt(e);
                            const r = (new TextEncoder).encode(t);
                            for (let e = 0; e < i.length; e++)
                                i[e] ^= r[e % r.length];
                            return n.inflate(i, {
                                to: "string"
                            })
                        }(e, t);
                        return a
                    } catch (e) {
                        return console.log(e),
                        null
                    }

为了在Nodejs中运行,可以借助GPT的帮助,让它帮你修改代码

修改后的能在Nodejs中运行的代码:

const { inflateRawSync } = require('zlib');

async function decompressAndDeobfuscateData(e, t) {
    try {
        // 解码 base64 编码的字符串
        let decodedData = Buffer.from(e, 'base64');
        
        // 创建一个 Uint8Array 以存储解码后的数据
        let uint8Array = new Uint8Array(decodedData);
        
        // 创建一个用于解密的 Uint8Array
        const keyData = Buffer.from(t);
        
        // 对解码后的数据进行异或解密
        for (let i = 0; i < uint8Array.length; i++) {
            uint8Array[i] ^= keyData[i % keyData.length];
        }
        
        // 使用 zlib 模块的 inflateRawSync 方法解压缩数据
        const inflatedData = inflateRawSync(uint8Array);
        
        // 将解压缩后的数据转换为字符串并返回
        return inflatedData.toString('utf8');
    } catch (error) {
        // 如果出现错误,打印错误信息并返回 null
        console.error(error);
        return null;
    }
}

// 使用示例:
const e = 'a/lpZGluZ2VjbOv3Iga4Sz2m1+vTByHdjKNCosAEh7lP6lh/SXrPvhH/rzw4aXR7kIdYx0ToFK0QpTBBloiTjRCvAM3q9KYITp7Hh5meP1ttYJQOFXHVPN6wg4+XFeqr2A5sOtle9uayXNqWO7UIl44P0PhVEKIwynb4PNYsIn3tgvTInN6h2Xb1CPQjsAwngLCTkvMRFTuG11GGCJSVCnEVkxgOqo9bWSORDJ6expBGug6+EcVcggZx+BOQx9GXG/GdSmCQniwNgMGy9MiVUpDbrfbLjvXWKcuM3CWxkIIokPu2uhh6Jqgkm6BrF52BLPGOnM4dCheTcPnIlayZHwrpSBIptiz+2k9jZicW12fhEG9PEqqQfCanNlgvc8ghXirRiHmNTAMoAa//KYJj4DhQbSqjUXEBzuS4YJ4vj2hLJhJyQhZ/VNIM2QWPfMQEsOPmeItr35MUpQnhEn9zyac3dBj8+X25iPh4H6g2ZYTBjoiTqLuDPt3hPN0jUUDCjha/4496Jb3d+ijuSwX1HAhp80V2w88nLUyvTVXpZLW/uUY7GiBSveCt5fvJO7Pi40VEMBK9zS/I+ohseENbei+3XbcfEzTPB1/k2nyEbgonT30SgcN1d1AtYcy2qNyURDVVH24yL9CI+WfykUVXp9fGXVF3FhGuDxYWKtfLdU+inkISLjxdZXj6O3Wi34R8L+PaD8gCITyRGMjTKIkZ6Xz9DpJJwFCxn3tupcNqxhpeK9uJlHUCoP0wTk9vQRNtTedtTKvT/SHLpPAu5MGYT5n2rhRPKlrALa5y8G3O2NT3eTUkSTTyJmPOMICASpWznmw23lFP2RUlJNiHt1HkiQAK2xltCgg+7/a7hyQEeEqYUVR47qh2ourLJbtJ0JFAvPQw1HXqCXh5LLFnGciNsxNCvh4My1O2yZ9SZse/R+A47OTbi4fyz1FNwd1qEGYDIUwrxVVXM7ABYiuCvM82RvhdfozHMwD23D0t6hyHOUwtjl5TbFQ91ZpfdSSUIhtSMwpGbDWQSsW6UqxIrBf9ceXXFzOHFtkrCOwXPkMb89NjbsTAKh8Z5I00vzZRM2h8tsHdI0uQ/cPjv1vviddcvl+TTDYIw9yAqIIW//i2y4kvUv84WSUu12UUTk8Quv9KWSHl1d0p9CDp1DaIM2v3E+Ky+btE3hUnhHOge/CvlyN4Vb87cVljHjxQOUwBLjvU0yO50E7IwswPyBdiWSSJA4IHuuhzz1Y1GIXliYI/UNiQfjljcPynQn9yP7VsGVHL5pxYTLnbnJhRv/bvzdvVKGCCD4g9VZpqzcOk/D8v8xVJ4Fh7XBHmqZkqy2mnvupmoxqDSWMF1ukX1vo1DDQ84YkO8lxzkUlnVCkByUirB+AoCtPBEIddPVu9ISh93uYEq5XH+7QyL7AXvhwFjfunh5isuf8cggs5gyta/g5CErRLKx/vuB890MR3BCHHA5/5DXIjufMvnb/AH4sFS8szema1KYO8xiKytIR37wTsPU8IuECDe19dFC8cqNZOzaGx+AswQ+yGT7bGsNX2oZBS2OgZX9QTw3BXpRVFdnSJtZeQiSm7mfr/1YcH+eiW7bS5gm8fsq8K7xVl7gQuNOPK+P9SBuDbjguBwk0tv5jWa2rslYOa3ZYYqcv0J6IxsgzQseS1snzefr/JHC6agzGfGBe3s9vjlVfTgY+FTvmokMKI2sLTZi/EPacOY2kt';
const t = 'tradingeconomics-charts-core-api-key';

decompressAndDeobfuscateData(e, t)
    .then(result => {
        console.log(result);
    })
    .catch(error => {
        console.error(error);
    });

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,作为 AI 语言模型,我无法提供完整的代码。但是,我可以提供一些参考: 1. 引入layUI框架,具体步骤可以参考layUI官网的文档。 2. 使用ajax请求发送登录信息,并在后端进行RSA加密验证。 3. 后端代码示例: ``` // 生成RSA密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 获取公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 获取私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 将公钥存储到session中 HttpSession session = request.getSession(); session.setAttribute("publicKey", publicKey); // 获取登录信息 String username = request.getParameter("username"); String password = request.getParameter("password"); // 对密码进行RSA解密 byte[] passwordBytes = Base64.decodeBase64(password); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptPasswordBytes = cipher.doFinal(passwordBytes); String decryptPassword = new String(decryptPasswordBytes); // 进行登录验证 if (userService.login(username, decryptPassword)) { // 登录成功 result.put("code", 0); result.put("msg", "登录成功"); } else { // 登录失败 result.put("code", -1); result.put("msg", "用户名或密码错误"); } // 将结果返回给前端 response.getWriter().write(result.toString()); ``` 4. 前端代码示例: ``` // 获取公钥 $.ajax({ url: "/getPublicKey", type: "GET", dataType: "json", success: function(data) { var publicKey = data.publicKey; // 使用公钥加密密码 var encryptPassword = rsaEncrypt($("#password").val(), publicKey); // 发送登录请求 $.ajax({ url: "/login", type: "POST", data: { username: $("#username").val(), password: encryptPassword }, dataType: "json", success: function(data) { if (data.code == 0) { // 登录成功 window.location.href = "/index"; } else { // 登录失败 layer.msg(data.msg); } }, error: function() { layer.msg("请求失败"); } }); }, error: function() { layer.msg("请求失败"); } }); // RSA加密函数 function rsaEncrypt(plaintext, publicKey) { var encrypt = new JSEncrypt(); encrypt.setPublicKey(publicKey); var ciphertext = encrypt.encrypt(plaintext); return ciphertext; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习各种软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值