开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 96|回复: 0
收起左侧

[JS例程分享] js与易语言RC4互通版本_优化

[复制链接]
结帖率:30% (6/20)
发表于 2025-7-31 19:15:10 | 显示全部楼层 |阅读模式   江西省九江市
[JavaScript] 纯文本查看 复制代码
function rc4(data, key) {
    var m = [];
    for (let i = 0; i < 256; i++) {
        m = i;
    }
    var k = new Array(256);
    var result = [];
    var length1 = key.length;
    let decrypt = Array.isArray(data);
    if (!decrypt) data = textToByte(data);
    var length = data.length;
    if (length1 > 0) {
        let b_key = textToByte(key);
        let j = 0;
        for (i = 0; i < 256; i++) {
            k = b_key[j];
            j++;
            if (j >= length1) {
                j = 0;
            }
        }
        j = 0;
        let temp;
        for (i = 0; i < 256; i++) {
            j = (j + m + k) & 255;
            temp = m;
            m = m[j];
            m[j] = temp;
        }
    }
    var i = 0, j = 0, temp;
    for (var x = 0; x < length; x++) {
        i = (i + 1) & 255;
        j = (j + m) & 255;
        temp = m;
        m = m[j];
        m[j] = temp;
        result.push(data[x] ^ m[(m + m[j]) & 255]);
    }
    return decrypt ? bytesToText(result) : result;
}
function textToByte(str) {
    var len = str.length;
    var bytes = [];
    for (var i = 0; i < len; i++) {
        var c = str.charCodeAt(i);
        if (c >= 0x010000 && c <= 0x10FFFF) {
            bytes.push(((c >> 18) & 0x07) | 0xF0);
            bytes.push(((c >> 12) & 0x3F) | 0x80);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if (c >= 0x000800 && c <= 0x00FFFF) {
            bytes.push(((c >> 12) & 0x0F) | 0xE0);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if (c >= 0x000080 && c <= 0x0007FF) {
            bytes.push(((c >> 6) & 0x1F) | 0xC0);
            bytes.push((c & 0x3F) | 0x80);
        } else {
            bytes.push(c & 0xFF);
        }
    }
    return bytes;
}
function bytesToText(bytes) {
    var text = "";
    var i = 0;

    while (i < bytes.length) {
        var byte1 = bytes;

        // 处理单字节ASCII字符 (0-127)
        if (byte1 < 128) {
            text += String.fromCharCode(byte1);
            i += 1;
        }
        // 处理双字节字符 (192-223)
        else if (byte1 >= 192 && byte1 < 224) {
            if (i + 1 >= bytes.length) break;
            var byte2 = bytes[i + 1];
            text += String.fromCharCode(
                ((byte1 & 31) << 6) |
                (byte2 & 63)
            );
            i += 2;
        }
        // 处理三字节字符 (224-239)
        else if (byte1 >= 224 && byte1 < 240) {
            if (i + 2 >= bytes.length) break;
            var byte2 = bytes[i + 1];
            var byte3 = bytes[i + 2];
            text += String.fromCharCode(
                ((byte1 & 15) << 12) |
                ((byte2 & 63) << 6) |
                (byte3 & 63)
            );
            i += 3;
        }
        // 其他情况跳过
        else {
            i += 1;
        }
    }

    return text;
}


// 示例用法:
let password = "123456";
let text = "你好,世界";
// 加密


let encryptedBuffer = rc4(text, password);
console.log("加密:", encryptedBuffer);

// 解密
let decryptedText = rc4(encryptedBuffer, password);
console.log("解密:", decryptedText);

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

本版积分规则 致发广告者

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

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

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