开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3091|回复: 10
收起左侧

[完成] 求大神优化一下论坛这个帖子的RC4加密500KB加密速度

 关闭 [复制链接]
结帖率:96% (374/388)
发表于 2020-11-22 18:19:14 | 显示全部楼层 |阅读模式   福建省福州市
50精币
本帖最后由 大司命 于 2020-11-22 18:23 编辑

https://bbs.125.la/forum.php?mod=viewthread&tid=13983317
我目前在用这个帖子的加解密算法。  加密短的没有问题  毫秒级别就好了··
但是我现在又想用他加密  文本文件。 大概100KB-500KB的大小。  实际测试  我电脑加密500KB大小文件的情况。加密最少要两三分钟···。太慢了。 要是能压缩到1分钟以内或者是10秒以内就好了(解密只要1秒就解密成功了,加密我想过去应该也可以吧)
PS: 不考虑换算法。我就喜欢这个加密!

最佳答案

查看完整内容

算法一窍不通.前边的转换修改了一下. 易语言的整数运算还是很快的.不一定非要用汇编 [e=4].版本 2 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 .局部变量 内容, 字节集 .局部变量 数组1, 字节型, , "0" .局部变量 文本数组, 文本型, , "0" 内容 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } 字节集到字节数组 (内容, 数组1) 调试输出 (数组1) 调试输出 (字节数组到字节集 (数组1)) 文本 ...
结帖率:100% (11/11)

签到天数: 17 天

发表于 2020-11-22 18:19:15 | 显示全部楼层   陕西省渭南市
算法一窍不通.前边的转换修改了一下.
易语言的整数运算还是很快的.不一定非要用汇编

  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
内容字节集 
数组1字节型0
文本数组文本型0
内容 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
字节集到字节数组 (内容, 数组1)
调试输出 (数组1)
调试输出 (字节数组到字节集 (数组1))
文本数组 = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9” }
调试输出 (字符数组到文本 (文本数组))
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
字节数组到字节集字节集 
参数名类 型参考可空数组备 注
参_字节数组字节型
变量名类 型静态数组备 注
计数器整数型 
内存句柄整数型 
指针整数型 
大小整数型 
返回值字节集 
大小 = 取数组成员数 (参_字节数组)
内存句柄 = 申请内存 (大小, )
计次循环首 (大小, 计数器)
写到内存 (参_字节数组 [计数器], 内存句柄 + 指针, )
指针 = 指针 + 1
计次循环尾 ()
返回值 = 指针到字节集 (内存句柄, 大小)
释放内存 (内存句柄)
返回 (返回值)
子程序名返回值类型公开备 注
字节集到字节数组  
参数名类 型参考可空数组备 注
参_字节集字节集
参_字节数组字节型
变量名类 型静态数组备 注
计数器整数型 
大小整数型 
指针整数型 
指针 = 取变量数据地址 (参_字节集)
大小 = 取字节集长度 (参_字节集)
重定义数组 (参_字节数组, 假, 大小)
计次循环首 (大小, 计数器)
参_字节数组 [计数器]指针到字节 (指针 + 计数器 - 1)
计次循环尾 ()
子程序名返回值类型公开备 注
字符数组到文本文本型 
参数名类 型参考可空数组备 注
参_文本数组文本型
变量名类 型静态数组备 注
计数器整数型 
大小整数型 
内存句柄整数型 
指针整数型 
返回值文本型 
大小 = 取数组成员数 (参_文本数组)
内存句柄 = 申请内存 (大小 + 1, )
计次循环首 (大小, 计数器)
写到内存 (参_文本数组 [计数器], 内存句柄 + 指针, )
指针 = 指针 + 1
计次循环尾 ()
返回值 = 指针到文本 (内存句柄)
释放内存 (内存句柄)
返回 (返回值)
子程序名返回值类型公开备 注
uniteBytes字节型 
参数名类 型参考可空数组备 注
参数1字节型
参数2字节型
' private static byte uniteBytes(byte arg8, byte arg9) {
' return ((byte)((((char)((((char)Byte.decode("0x" + new String(new byte[]{arg8})).byteValue())) << 4))) ^ (((char)
' Byte.decode("0x" + new String(new byte[]{arg9})).byteValue()))));
' }
返回 (到字节 (位异或 (左移 (字节到整数 (参数1), 4), 字节到整数 (参数2))))
子程序名返回值类型公开备 注
字节到整数整数型 
参数名类 型参考可空数组备 注
参_字节字节型
如果 (参_字节 ≤ 57)
返回 (参_字节 - 48)
返回 (参_字节 - 55)

子程序名返回值类型公开备 注
HexString2Bytes字节集 
参数名类 型参考可空数组备 注
arg7文本型
变量名类 型静态数组备 注
v2字节型0
v3整数型 
v4字节型0
v1整数型 
' private static byte[] HexString2Bytes(String arg7) {
' byte[] v2;
' try {
' int v3 = arg7.length();
' v2 = new byte[v3 / 2];
' byte[] v4 = arg7.getBytes("GBK");
' int v1;
' for(v1 = 0; v1 < v3 / 2; ++v1) {
' v2[v1] = test.uniteBytes(v4[v1 * 2], v4[v1 * 2 + 1]);
' }
' }
' catch(Exception v0) {
' v0.printStackTrace();
' v2 = new byte[0];
' }
v3 = 取文本长度 (arg7)
重定义数组 (v2, 假, v3 ÷ 2)
字节集到字节数组 (到字节集 (arg7), v4)
判断循环首 (v1 < v3 ÷ 2)
v2 [v1 + 1]uniteBytes (v4 [v1 × 2 + 1], v4 [v1 × 2 + 2])
v1 = v1 + 1
判断循环尾 ()
返回 (字节数组到字节集 (v2))
' return v2;
' }
子程序名返回值类型公开备 注
initKey字节集 
参数名类 型参考可空数组备 注
arg11文本型
变量名类 型静态数组备 注
v7字节集 
v10整数型 
v0字节型0
v5字节型256
v2整数型 
v3整数型 
v4整数型 
v6字节型 
' private static byte[] initKey(String arg11) {
' byte[] v7 = null;
' int v10 = 256;
' try {
' byte[] v0 = arg11.getBytes("GBK");
' byte[] v5 = new byte[256];
' int v2;
' for(v2 = 0; v2 < v10; ++v2) {
' v5[v2] = ((byte)v2);
' }
v10 = 256
字节集到字节数组 (到字节集 (arg11), v0)
判断循环首 (v2 < v10)
v5 [v2 + 1]到字节 (v2)
v2 = v2 + 1
判断循环尾 ()
' int v3 = 0;
' int v4 = 0;
' if(v0 != null && v0.length != 0) {
' v2 = 0;
' }
' else {
' return v7;
' }
判断 (取数组成员数 (v0) ≠ 0)
v2 = 0
返回 (v7)
' while(v2 < v10) {
' v4 = (v0[v3] & 255) + (v5[v2] & 255) + v4 & 255;
' byte v6 = v5[v2];
' v5[v2] = v5[v4];
' v5[v4] = v6;
' v3 = (v3 + 1) % v0.length;
' ++v2;
' }
判断循环首 (v2 < v10)
v4 = 位与 (位与 (v0 [v3 + 1], 255)位与 (v5 [v2 + 1], 255) + v4, 255)
v6 = v5 [v2 + 1]
v5 [v2 + 1] = v5 [v4 + 1]
v5 [v4 + 1] = v6
v3 (v3 + 1)取数组成员数 (v0)
v2 = v2 + 1
判断循环尾 ()
' return v5;
' }
' catch(Exception v1) {
' v1.printStackTrace();
' return v7;
' }
' }
返回 (字节数组到字节集 (v5))
子程序名返回值类型公开备 注
RC4Base字节集 
参数名类 型参考可空数组备 注
arg9字节集
arg10文本型
变量名类 型静态数组备 注
v4整数型 
v6整数型 
v1字节型0
v2字节型0
v0整数型 
v3字节型 
' private static byte[] RC4Base(byte[] arg9, String arg10) {
' int v4 = 0;
' int v6 = 0;
' byte[] v1 = 加密操作.initKey(arg10);
' byte[] v2 = new byte[arg9.length];
' int v0;
' for(v0 = 0; v0 < arg9.length; ++v0) {
' v4 = v4 + 1 & 255;
' v6 = (v1[v4] & 255) + v6 & 255;
' byte v3 = v1[v4];
' v1[v4] = v1[v6];
' v1[v6] = v3;
' v2[v0] = ((byte)(arg9[v0] ^ v1[(v1[v4] & 255) + (v1[v6] & 255) & 255]));
' }
' return v2;
' }
字节集到字节数组 (initKey (arg10), v1)
重定义数组 (v2, 假, 取字节集长度 (arg9))
判断循环首 (v0 < 取字节集长度 (arg9))
v4 = 位与 (v4 + 1, 255)
v6 = 位与 (位与 (v1 [v4 + 1], 255) + v6, 255)
v3 = v1 [v4 + 1]
v1 [v4 + 1] = v1 [v6 + 1]
v1 [v6 + 1] = v3
v2 [v0 + 1]到字节 (位异或 (取字节集数据 (arg9, 1, v0 + 1), v1 [位与 (位与 (v1 [v4 + 1], 255)位与 (v1 [v6 + 1], 255), 255) + 1]))
v0 = v0 + 1
判断循环尾 ()
返回 (字节数组到字节集 (v2))
子程序名返回值类型公开备 注
RC4_Encode文本型 
参数名类 型参考可空数组备 注
arg10文本型原文
arg11文本型密钥
变量名类 型静态数组备 注
v9文本型 
v0字节型0
v3文本型0
v5整数型 
v8文本型0
v4整数型 
v7整数型 
v1整数型 
v6整数型 
' @SimpleFunction public static String RC4加密(String arg10, String arg11) {
' String v9;
' if(arg10 != null && arg11 != null) {
' try {
' byte[] v0 = 加密操作.RC4Base(arg10.getBytes("GBK"), arg11);
' char[] v3 = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
' int v5 = v0.length;
' char[] v8 = new char[v5 * 2];
' int v4 = 0;
' int v7 = 0;
' while(v4 < v5) {
' int v1 = v0[v4];
' int v6 = v7 + 1;
' v8[v7] = v3[v1 >>> 4 & 15];
' v7 = v6 + 1;
' v8[v6] = v3[v1 & 15];
' ++v4;
' }
字节集到字节数组 (RC4Base (到字节集 (arg10), arg11), v0)
v3 = { “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “A”, “B”, “C”, “D”, “E”, “F” }
v5 = 取数组成员数 (v0)
重定义数组 (v8, 假, v5 × 2)
判断循环首 (v4 < v5)
v1 = v0 [v4 + 1]
v6 = v7 + 1
v8 [v7 + 1] = v3 [位与 (右移 (v1, 4), 15) + 1]
v7 = v6 + 1
v8 [v6 + 1] = v3 [位与 (v1, 15) + 1]
v4 = v4 + 1
判断循环尾 ()
' v9 = new String(v8);
' }
' catch(Exception v2) {
' v2.printStackTrace();
' v9 = "";
' }
' }
' else {
' v9 = "";
' }
v9 = 字符数组到文本 (v8)
返回 (v9)
' return v9;
' }
子程序名返回值类型公开备 注
RC4_Decode文本型 
参数名类 型参考可空数组备 注
arg4文本型密文
arg5文本型密钥
变量名类 型静态数组备 注
v1文本型 
' public static String RC4解密(String arg4, String arg5) {
' String v1;
' if(arg4 != null && arg5 != null) {
' try {
' v1 = new String(test.RC4Base(test.HexString2Bytes(arg4), arg5), "GBK");
' }
' catch(Exception v0) {
' v0.printStackTrace();
' v1 = "";
' }
' }
' else {
' v1 = "";
' }
v1 = 到文本 (RC4Base (HexString2Bytes (arg4), arg5))
返回 (v1)
' return v1;
' }
子程序名返回值类型公开备 注
指针到字节字节型 
参数名类 型参考可空数组备 注
指针整数型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库

回复

使用道具 举报

结帖率:96% (374/388)

签到天数: 5 天

 楼主| 发表于 2020-11-22 18:31:37 | 显示全部楼层   福建省福州市
回复

使用道具 举报

结帖率:98% (131/134)

签到天数: 8 天

发表于 2020-11-22 18:35:32 | 显示全部楼层   天津市天津市
@jr21066 和@cf006a 也很厉害
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

发表于 2020-11-22 18:56:58 | 显示全部楼层   湖南省邵阳市
可以是可以,但是,做汇编是一件费时费精力的事情,这个如果对我自己来说没有价值而特意去研究的话,感觉心思放不上去.因为最近颈椎病原因,所以不太愿意用空余时间再去研究,同时这里也提醒一下各位易友,经常坐电脑旁边,记得多做抬头摇头动作,谨防颈椎病
回复

使用道具 举报

结帖率:96% (374/388)

签到天数: 5 天

 楼主| 发表于 2020-11-22 19:05:45 | 显示全部楼层   福建省福州市
zxw0402 发表于 2020-11-22 18:56
可以是可以,但是,做汇编是一件费时费精力的事情,这个如果对我自己来说没有价值而特意去研究的话,感觉心思放 ...

能不能 就把原帖里 最浪费速度的地方微调一下。  全部都改确实麻烦。 改一两处极其浪费速度的地方就行了呀···大神颈椎好了之后 帮帮忙啦。。。   我也颈椎病 不过不是写代码导致的。是躺在床上玩手机玩太迟。 长期几次就出现 。严重时 出现 平躺起身天旋地转的感觉,都不敢躺下睡觉了· 医生说是颈椎压迫神经。   怕死的我 天天做广播··过了几天就恢复了。·
回复

使用道具 举报

结帖率:96% (374/388)

签到天数: 5 天

 楼主| 发表于 2020-11-22 19:19:54 | 显示全部楼层   福建省福州市
@cf006a @jr21066
回复

使用道具 举报

结帖率:94% (17/18)
发表于 2020-11-22 19:56:26 | 显示全部楼层   浙江省台州市
不全改很难提速,HexString2Bytes 这个有现成的
有好几个版本,大多是混合版本,找纯汇编的(没有一句易语言代码的那种)
回复

使用道具 举报

结帖率:100% (11/11)

签到天数: 17 天

发表于 2020-11-22 20:45:04 | 显示全部楼层   陕西省渭南市
又修改了  HexString2Bytes

后边的计算看起来头痛.不搞了.

优化.e

287.48 KB, 下载次数: 6, 下载积分: 精币 -1 枚

回复

使用道具 举报

结帖率:96% (374/388)

签到天数: 5 天

 楼主| 发表于 2020-11-22 23:13:46 | 显示全部楼层   福建省福州市
jr21066 发表于 2020-11-22 20:45
又修改了  HexString2Bytes

后边的计算看起来头痛.不搞了.

真心牛逼。原来要600秒的。 现在只要60秒了。···  还能不能再快点··
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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