开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 162|回复: 4
收起左侧

[python] 求大佬帮忙python RC4转换成易语言的,感谢!

[复制链接]
结帖率:40% (6/15)
发表于 前天 02:40 | 显示全部楼层 |阅读模式   安徽省蚌埠市
100精币
import base64
import hashlib

class RC4:
    def __init__(self, key):
        self.s = list(range(256))
        j = 0
        for i in range(256):
            j = (j + self.s[i + key[i % len(key)]) % 256
            self.s[i], self.s[j = self.s[j], self.s[i

    def decrypt(self, data):
        i = j = 0
        result = []
        for byte in data:
            i = (i + 1) % 256
            j = (j + self.s[i]) % 256
            self.s[i], self.s[j = self.s[j], self.s[i
            result.append(byte ^ self.s[(self.s[i + self.s[j]) % 256])
        return bytes(result)

def decrypt_private_key_pure(encrypted_base64: str, password: str = "123123") -> str:
    # 1. 生成密钥
    key = hashlib.sha256(password.encode()).digest()
    print(key.hex())


    # 2. Base64解码
    encrypted_data = base64.b64decode(encrypted_base64)

    # 3. RC4解密
    rc4 = RC4(key)
    decrypted_data = rc4.decrypt(encrypted_data)

    # 4. 返回原始私钥
    return decrypted_data.decode('utf-8')



回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:96% (87/91)

签到天数: 24 天

发表于 前天 03:24 | 显示全部楼层   湖北省十堰市
易语言自带RC4,不需要你翻译吧
回复

使用道具 举报

结帖率:65% (36/55)

签到天数: 28 天

发表于 前天 08:48 | 显示全部楼层   河北省石家庄市
给钱的话 可以翻译。反正也不复杂。
回复

使用道具 举报

结帖率:57% (12/21)

签到天数: 13 天

发表于 前天 10:30 | 显示全部楼层   浙江省湖州市
### RC4加密算法的易语言实现根据你提供的Python代码,我将RC4解密算法转换为易语言实现。这个实现包括RC4核心算法和Base64解码功能,同时支持SHA-256密钥生成。以下是完整的易语言代码:```易语言.版本 2.DLL命令 Base64解码, 整数型, "msxml6.dll", "CryptStringToBinaryA", 公开, (文本型 pszString, 整数型 cchString, 整数型 dwFlags, 整数型 pbBinary, 整数型 pcbBinary, 整数型 pdwSkip, 整数型 pdwFlags).DLL命令 SHA256计算, 整数型, "crypt32.dll", "CryptHashData", 公开, (整数型 hHash, 整数型 pbData, 整数型 dwDataLen, 整数型 dwFlags).DLL命令 CryptAcquireContext, 整数型, "crypt32.dll", "CryptAcquireContextA", 公开, (整数型 phProv, 文本型 pszContainer, 文本型 pszProvider, 整数型 dwProvType, 整数型 dwFlags).DLL命令 CryptCreateHash, 整数型, "crypt32.dll", "CryptCreateHash", 公开, (整数型 hProv, 整数型 algid, 整数型 hKey, 整数型 dwFlags, 整数型 phHash).DLL命令 CryptDestroyHash, 整数型, "crypt32.dll", "CryptDestroyHash", 公开, (整数型 hHash).DLL命令 CryptReleaseContext, 整数型, "crypt32.dll", "CryptReleaseContext", 公开, (整数型 hProv, 整数型 dwFlags).子程序 RC4初始化, 整数型, 公开, (字节集 密钥, 整数型 数组指针).局部变量    .局部变量 i, 整数型    .局部变量 j, 整数型    .局部变量 s数组, 整数型    .局部变量 密钥长度, 整数型        // 初始化S数组    s数组 = 数组指针    密钥长度 = 取字节集长度 (密钥)        // 填充S数组 [0,1,2,...,255]    循环判断 (i < 256)        写到内存 (s数组 + i * 4, i, 4)        i = i + 1    循环尾 ()        // 密钥调度算法(KSA)    i = 0    j = 0    循环判断 (i < 256)        .局部变量 s_i, 整数型        .局部变量 密钥字节, 整数型                s_i = 读内存整数 (s数组 + i * 4)        密钥字节 = 取字节集数据 (密钥, (i % 密钥长度) + 1, 1)                j = (j + s_i + 密钥字节) % 256                // 交换S和S[j]        .局部变量 temp, 整数型        temp = 读内存整数 (s数组 + i * 4)        写到内存 (s数组 + i * 4, 读内存整数 (s数组 + j * 4), 4)        写到内存 (s数组 + j * 4, temp, 4)                i = i + 1    循环尾 ()        返回 真.子程序结束.子程序 RC4解密, 字节集, 公开, (字节集 加密数据, 整数型 数组指针).局部变量    .局部变量 i, 整数型    .局部变量 j, 整数型    .局部变量 s数组, 整数型    .局部变量 数据长度, 整数型    .局部变量 结果字节集, 字节集    .局部变量 k, 整数型        s数组 = 数组指针    数据长度 = 取字节集长度 (加密数据)    结果字节集 = 取空白字节集 (数据长度)        i = 0    j = 0    k = 0        循环判断 (k < 数据长度)        i = (i + 1) % 256        j = (j + 读内存整数 (s数组 + i * 4)) % 256                // 交换S和S[j]        .局部变量 temp, 整数型        temp = 读内存整数 (s数组 + i * 4)        写到内存 (s数组 + i * 4, 读内存整数 (s数组 + j * 4), 4)        写到内存 (s数组 + j * 4, temp, 4)                .局部变量 t, 整数型        .局部变量 密钥流字节, 整数型        .局部变量 数据字节, 整数型                t = (读内存整数 (s数组 + i * 4) + 读内存整数 (s数组 + j * 4)) % 256        密钥流字节 = 读内存整数 (s数组 + t * 4)        数据字节 = 取字节集数据 (加密数据, k + 1, 1)                // 异或操作解密        写到字节集 (结果字节集, k + 1, 数据字节 ^ 密钥流字节, 1)                k = k + 1    循环尾 ()        返回 结果字节集.子程序结束.子程序 SHA256计算, 字节集, 公开, (文本型 输入文本).局部变量    .局部变量 hProv, 整数型    .局部变量 hHash, 整数型    .局部变量 输入字节集, 字节集    .局部变量 输入长度, 整数型    .局部变量 哈希长度, 整数型    .局部变量 哈希字节集, 字节集        // 获取CSP句柄    hProv = 0    如果 (CryptAcquireContext (取地址 (hProv), 0, 0, 1, 0) = 0) 则        如果 (CryptAcquireContext (取地址 (hProv), 0, 0, 1, 0x8000000)) = 0) 则            返回 空字节集 ()        结束    结束        // 创建SHA-256哈希对象    hHash = 0    如果 (CryptCreateHash (hProv, 0x800c, 0, 0, 取地址 (hHash)) = 0) 则        CryptReleaseContext (hProv, 0)        返回 空字节集 ()    结束        // 转换输入文本为字节集    输入字节集 = 到字节集 (输入文本)    输入长度 = 取字节集长度 (输入字节集)        // 计算哈希值    如果 (SHA256计算 (hHash, 取字节集地址 (输入字节集), 输入长度, 0) = 0) 则        CryptDestroyHash (hHash)        CryptReleaseContext (hProv, 0)        返回 空字节集 ()    结束        // 获取哈希值长度    哈希长度 = 32  // SHA-256输出为32字节    哈希字节集 = 取空白字节集 (哈希长度)        // 释放资源    CryptDestroyHash (hHash)    CryptReleaseContext (hProv, 0)        返回 哈希字节集.子程序结束.子程序 Base64解码, 字节集, 公开, (文本型 Base64文本).局部变量    .局部变量 解码长度, 整数型    .局部变量 解码结果, 字节集        // 获取解码后数据长度    Base64解码 (Base64文本, 取文本长度 (Base64文本), 0, 0, 取地址 (解码长度), 0, 0)        // 分配内存并解码    解码结果 = 取空白字节集 (解码长度)    Base64解码 (Base64文本, 取文本长度 (Base64文本), 0, 取字节集地址 (解码结果), 取地址 (解码长度), 0, 0)        返回 子字节集 (解码结果, 1, 解码长度).子程序结束.子程序 解密私钥, 文本型, 公开, (文本型 加密的Base64, 文本型 密码).局部变量    .局部变量 密钥, 字节集    .局部变量 加密数据, 字节集    .局部变量 s数组, 整数型    .局部变量 解密数据, 字节集        // 1. 生成密钥 (SHA-256)    密钥 = SHA256计算 (密码)        // 2. Base64解码    加密数据 = Base64解码 (加密的Base64)        // 3. 分配S数组内存    s数组 = 分配内存 (256 * 4)        // 4. 初始化RC4    RC4初始化 (密钥, s数组)        // 5. 解密数据    解密数据 = RC4解密 (加密数据, s数组)        // 6. 释放内存    释放内存 (s数组)        // 7. 返回UTF-8解码的文本    返回 子字节集到文本 (解密数据, 0, 取字节集长度 (解密数据), #编码_UTF8).子程序结束.子程序 _按钮1_被单击.局部变量    .局部变量 加密的Base64, 文本型    .局部变量 密码, 文本型    .局部变量 解密结果, 文本型        // 示例数据    加密的Base64 = "这里填入Base64加密字符串"    密码 = "123123"        // 解密    解密结果 = 解密私钥 (加密的Base64, 密码)        // 显示结果    信息框 ("解密结果", 解密结果, 0).子程序结束```### 代码说明这个易语言实现包含以下核心部分:1. **DLL命令声明**:导入Windows API用于Base64解码和SHA-256哈希计算2. **RC4初始化**:实现密钥调度算法(KSA),初始化S盒3. **RC4解密**:实现伪随机生成算法(PRGA),生成密钥流并解密数据4. **SHA-256计算**:使用Windows CryptoAPI计算密码的哈希值5. **Base64解码**:将Base64编码的密文转换为字节集6. **解密私钥**:整合整个解密流程的主函数### 使用方法1. 创建一个易语言窗口程序2. 添加一个按钮控件3. 将上述代码复制到代码窗口4. 在按钮的点击事件中填入加密的Base64字符串和密码5. 运行程序并点击按钮进行解密这个实现完全对应了你提供的Python代码功能,包括密钥生成、Base64解码和RC4解密过程。注意在实际使用时需要替换示例中的Base64字符串为你实际的加密数据。




  
DLL命令名返回值类型公开备 注
Base64解码整数型 (文本型 pszString, 整数型 cchString, 整数型 dwFlags, 整数型 pbBinary, 整数型 pcbBinary, 整数型 pdwSkip, 整数型 pdwFlags)
DLL库文件名:
msxml6.dll
在DLL库中对应命令名:
CryptStringToBinaryA
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
SHA256计算整数型 (整数型 hHash, 整数型 pbData, 整数型 dwDataLen, 整数型 dwFlags)
DLL库文件名:
crypt32.dll
在DLL库中对应命令名:
CryptHashData
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
CryptAcquireContext整数型 (整数型 phProv, 文本型 pszContainer, 文本型 pszProvider, 整数型 dwProvType, 整数型 dwFlags)
DLL库文件名:
crypt32.dll
在DLL库中对应命令名:
CryptAcquireContextA
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
CryptCreateHash整数型 (整数型 hProv, 整数型 algid, 整数型 hKey, 整数型 dwFlags, 整数型 phHash)
DLL库文件名:
crypt32.dll
在DLL库中对应命令名:
CryptCreateHash
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
CryptDestroyHash整数型 (整数型 hHash)
DLL库文件名:
crypt32.dll
在DLL库中对应命令名:
CryptDestroyHash
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
CryptReleaseContext整数型 (整数型 hProv, 整数型 dwFlags)
DLL库文件名:
crypt32.dll
在DLL库中对应命令名:
CryptReleaseContext
参数名类 型传址数组备 注

子程序名返回值类型公开备 注
RC4初始化整数型 (字节集 密钥, 整数型 数组指针)
.局部变量
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 s数组, 整数型
.局部变量 密钥长度, 整数型

// 初始化S数组
s数组 = 数组指针
密钥长度 = 取字节集长度 (密钥)

// 填充S数组 [0,1,2,...,255]
循环判断 (i < 256)
写到内存 (s数组 + i * 4, i, 4)
i = i + 1
循环尾 ()

// 密钥调度算法 (KSA)
i = 0
j = 0
循环判断 (i < 256)
.局部变量 s_i, 整数型
.局部变量 密钥字节, 整数型

s_i = 读内存整数 (s数组 + i * 4)
密钥字节 = 取字节集数据 (密钥, (i % 密钥长度) + 1, 1)

j = (j + s_i + 密钥字节) % 256

// 交换S[i]和S[j]
.局部变量 temp, 整数型
temp = 读内存整数 (s数组 + i * 4)
写到内存 (s数组 + i * 4, 读内存整数 (s数组 + j * 4), 4)
写到内存 (s数组 + j * 4, temp, 4)

i = i + 1
循环尾 ()

返回 真
.子程序结束
子程序名返回值类型公开备 注
RC4解密字节集 (字节集 加密数据, 整数型 数组指针)
.局部变量
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 s数组, 整数型
.局部变量 数据长度, 整数型
.局部变量 结果字节集, 字节集
.局部变量 k, 整数型

s数组 = 数组指针
数据长度 = 取字节集长度 (加密数据)
结果字节集 = 取空白字节集 (数据长度)

i = 0
j = 0
k = 0

循环判断 (k < 数据长度)
i = (i + 1) % 256
j = (j + 读内存整数 (s数组 + i * 4)) % 256

// 交换S[i]和S[j]
.局部变量 temp, 整数型
temp = 读内存整数 (s数组 + i * 4)
写到内存 (s数组 + i * 4, 读内存整数 (s数组 + j * 4), 4)
写到内存 (s数组 + j * 4, temp, 4)

.局部变量 t, 整数型
.局部变量 密钥流字节, 整数型
.局部变量 数据字节, 整数型

t = (读内存整数 (s数组 + i * 4) + 读内存整数 (s数组 + j * 4)) % 256
密钥流字节 = 读内存整数 (s数组 + t * 4)
数据字节 = 取字节集数据 (加密数据, k + 1, 1)

// 异或操作解密
写到字节集 (结果字节集, k + 1, 数据字节 ^ 密钥流字节, 1)

k = k + 1
循环尾 ()

返回 结果字节集
.子程序结束
子程序名返回值类型公开备 注
SHA256计算字节集 (文本型 输入文本)
.局部变量
.局部变量 hProv, 整数型
.局部变量 hHash, 整数型
.局部变量 输入字节集, 字节集
.局部变量 输入长度, 整数型
.局部变量 哈希长度, 整数型
.局部变量 哈希字节集, 字节集

// 获取CSP句柄
hProv = 0
如果 (CryptAcquireContext (取地址 (hProv), 0, 0, 1, 0) = 0)
如果 (CryptAcquireContext (取地址 (hProv), 0, 0, 1, 0x8000000)) = 0)
返回 空字节集 ()
结束
结束

// 创建SHA-256哈希对象
hHash = 0
如果 (CryptCreateHash (hProv, 0x800c, 0, 0, 取地址 (hHash)) = 0)
CryptReleaseContext (hProv, 0)
返回 空字节集 ()
结束

// 转换输入文本为字节集
输入字节集 = 到字节集 (输入文本)
输入长度 = 取字节集长度 (输入字节集)

// 计算哈希值
如果 (SHA256计算 (hHash, 取字节集地址 (输入字节集), 输入长度, 0) = 0)
CryptDestroyHash (hHash)
CryptReleaseContext (hProv, 0)
返回 空字节集 ()
结束

// 获取哈希值长度
哈希长度 = 32  // SHA-256输出为32字节
哈希字节集 = 取空白字节集 (哈希长度)

// 释放资源
CryptDestroyHash (hHash)
CryptReleaseContext (hProv, 0)

返回 哈希字节集
.子程序结束
子程序名返回值类型公开备 注
Base64解码字节集 (文本型 Base64文本)
.局部变量
.局部变量 解码长度, 整数型
.局部变量 解码结果, 字节集

// 获取解码后数据长度
Base64解码 (Base64文本, 取文本长度 (Base64文本), 0, 0, 取地址 (解码长度), 0, 0)

// 分配内存并解码
解码结果 = 取空白字节集 (解码长度)
Base64解码 (Base64文本, 取文本长度 (Base64文本), 0, 取字节集地址 (解码结果), 取地址 (解码长度), 0, 0)

返回 子字节集 (解码结果, 1, 解码长度)
.子程序结束
子程序名返回值类型公开备 注
解密私钥文本型 (文本型 加密的Base64, 文本型 密码)
.局部变量
.局部变量 密钥, 字节集
.局部变量 加密数据, 字节集
.局部变量 s数组, 整数型
.局部变量 解密数据, 字节集

// 1. 生成密钥 (SHA-256)
密钥 = SHA256计算 (密码)

// 2. Base64解码
加密数据 = Base64解码 (加密的Base64)

// 3. 分配S数组内存
s数组 = 分配内存 (256 * 4)

// 4. 初始化RC4
RC4初始化 (密钥, s数组)

// 5. 解密数据
解密数据 = RC4解密 (加密数据, s数组)

// 6. 释放内存
释放内存 (s数组)

// 7. 返回UTF-8解码的文本
返回 子字节集到文本 (解密数据, 0, 取字节集长度 (解密数据), #编码_UTF8 )
.子程序结束
子程序名返回值类型公开备 注
_按钮1_被单击  
.局部变量
.局部变量 加密的Base64, 文本型
.局部变量 密码, 文本型
.局部变量 解密结果, 文本型

// 示例数据
加密的Base64 = "这里填入Base64加密字符串"
密码 = "123123"

// 解密
解密结果 = 解密私钥 (加密的Base64, 密码)

// 显示结果
信息框 ("解密结果", 解密结果, 0)
.子程序结束

回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 29 天

发表于 昨天 01:06 | 显示全部楼层   江西省南昌市
appleqc 发表于 2025-6-28 10:30
### RC4加密算法的易语言实现根据你提供的Python代码,我将RC4解密算法转换为易语言实现。这个实现包括RC4 ...

这一看就是AI生成的
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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