开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 135|回复: 3
打印 上一主题 下一主题
收起左侧

[完成] node环境下的js改写

 关闭 [复制链接]
结帖率:89% (16/18)
跳转到指定楼层
楼主
发表于 昨天 17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   江苏省南通市
50精币
node环境下可以正常执行的js代码如下(在decode函数里面传入正确的参数,可以得到正确的结果),怎么将下面的代码改成能在wt-js工具里面执行,或者怎么能实现在易里面调用这个代码,求大佬指点。

const crypto = require('crypto');

var base64hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function atob(s) {
    s = s.replace(/\s|=/g, '');
    var cur, prev, mod, i = 0, result = [];
    while (i < s.length) {
        cur = base64hash.indexOf(s.charAt(i));
        mod = i % 4;
        switch (mod) {
            case 0: 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('');
}

function B(e) {
    let t = e.words.length;
    let n = new Uint8Array(e.sigBytes);
    let r = 0;
    for (let i = 0; i < t; i++) {
        let word = e.words;
        let a = [word >> 24 & 255, word >> 16 & 255, word >> 8 & 255, word & 255];
        for (let t = 0; t < 4 && r < e.sigBytes; t++) n[r++] = a[t];
    }
    return n;
}

function V(e) {
    let t = e.replace(/-/g, '+').replace(/_/g, '/');
    while (t.length % 4) t += '=';
    let n = atob(t);
    let r = n.length;
    let i = new Uint8Array(r);
    for (let e = 0; e < r; e++) i[e] = n.charCodeAt(e);
    return i;
}

async function decryptAES(key, data, iv) {
    let c = crypto.createSecretKey(key, 'raw');
    let d = crypto.createDecipheriv('aes-128-gcm', c, iv);
    d.setAuthTag(data.slice(data.length - 16));
    let res = d.update(data.slice(0, data.length - 16), null, 'utf8') + d.final('utf8');
    return res;
}

function md5(str) {
    let hash = crypto.createHash('md5').update(str).digest();
    let words = [];
    for (let i = 0; i < 16; i += 4) {
        words.push((hash << 24) | (hash[i + 1] << 16) | (hash[i + 2] << 8) | hash[i + 3]);
    }
    return { words, sigBytes: 16 };
}

async function decode(main, par, tt, range = 5, salt = "EncryptKeyByRoss") {
    let buf = V(main);
    let iv = buf.slice(0, 12);
    let body = buf.slice(12);

    for (let i = 0; i <= range; i++) {
               try {
            let key2 = md5(`${ip}-${salt}-${time + i}`);
            let res2 = await decryptAES(B(key2), body, iv);
             console.log("结果:", JSON.parse(res2));
            return;
        } catch {}
    }
    console.log("\n❌ 失败");
}


最佳答案

查看完整内容

你需要提供加密数据和解密后的数据
结帖率:80% (4/5)

签到天数: 6 天

沙发
发表于 昨天 17:41 | 只看该作者   上海市上海市
panjunfu 发表于 2026-6-5 20:39
大概的代码流程知道是这么一回事,AES只用过CBC,ECB这几种,尤其KEY和IV是字节集的就更加蒙圈了,还有那 ...

你需要提供加密数据和解密后的数据
回复

使用道具 举报

结帖率:80% (4/5)

签到天数: 6 天

板凳
发表于 昨天 19:31 | 只看该作者   上海市上海市
标准的Base64,解码后数据前 12 字节是初始化向量 (IV),剩余部分是密文 + 认证标签(后 16 字节是 GCM 的 Tag)。在 range 范围内(默认 0~5)尝试不同时间偏移,构造字符串:ip - salt - (time + i),并对该字符串做 MD5 得到 16 字节密钥。简单说就是不同时间偏移进行构建数据,然后进行ma5编码。AES‑128‑GCM用上面生成的密钥、IV 和密文(含 Tag)进行解密。base64和md5精易模块,密钥的字符串构建需要你自己仿写,AES‑128‑GCM论坛有
回复

使用道具 举报

结帖率:89% (16/18)

签到天数: 3 天

地板
 楼主| 发表于 昨天 20:39 | 只看该作者   江苏省南通市
haoren1212 发表于 2026-6-5 19:31
标准的Base64,解码后数据前 12 字节是初始化向量 (IV),剩余部分是密文 + 认证标签(后 16 字节是 GCM 的  ...

大概的代码流程知道是这么一回事,AES只用过CBC,ECB这几种,尤其KEY和IV是字节集的就更加蒙圈了,还有那个md5的结果好像也不是字符串吧,那个base64解码我看代码里面是atob,不知道和精易的编码_BASE64解码是不是一样,大佬能不能写个简单的例子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表