|
分享源码
界面截图: |
|
是否带模块: |
调用了模块 |
备注说明: |
- |
稍稍使用了一下精易模块(进制_十六到十 等)。
起源:最近在分析基于E4A编写的安卓程序,于是就看到了E4A的rc4实现类,正好那个程序调用了这个加密,提取出加密代码作为java程序编译运行,加密结果跟易语言真的是……说天差地远应该也没什么问题。
所以说,这个加密是翻译java代码来的,不是真正自己写的。
(PS:这次翻译又进一步体会到易语言的索引“从1开始”给我带来的巨大不便……)
这个算法应该是和E4A的“RC4加密”“RC4解密”没有什么差别的,应该可以用在易语言程序和E4A程序的互相通讯上作为加密手段使用。
最后,关于子程序内部参数/变量名称混乱无逻辑,主要是因为JEB反编译出来的Java代码也是没有参数/变量名的,属于自动生成的名称(argX为参数,vX为变量)。
算法区:
变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | temp | 字节集 | | | 计次循环首 (取数组成员数 (arg ), i )temp = temp + 到字节集 (arg [i ])计次循环尾 ()返回 (temp )变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | temp | 字节型 | | 0 | 计次循环首 (取字节集长度 (arg ), i )加入成员 (temp, 取字节集数据 (arg, 1, i )) 计次循环尾 ()re = temp 变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | temp | 文本型 | | | 计次循环首 (取数组成员数 (arg ), i )temp = temp + arg [i ]计次循环尾 ()返回 (temp )|
uniteBytes | 字节型 | | |
arg8 | 字节型 | | | | arg9 | 字节型 | | | | 返回 (到字节 (位异或 (左移 (进制_十六到十 (字符 (arg8 )), 4 ), 进制_十六到十 (字符 (arg9 )) )) )|
HexString2Bytes | 字节集 | | |
arg7 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | v2 | 字节型 | | 0 | v3 | 整数型 | | | v4 | 字节型 | | 0 | v1 | 整数型 | | |
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 )) 变量名 | 类 型 | 静态 | 数组 | 备 注 | v7 | 字节集 | | | v10 | 整数型 | | | v0 | 字节型 | | 0 | v5 | 字节型 | | 256 | v2 | 整数型 | | | v3 | 整数型 | | | v4 | 整数型 | | | v6 | 字节型 | | |
v10 = 256 字节集到字节数组 (到字节集 (arg11 ), v0 )判断循环首 (v2 < v10 )v5 [v2 + 1 ] = 到字节 (v2 )v2 = v2 + 1 判断循环尾 () 判断 (取数组成员数 (v0 ) ≠ 0 )v2 = 0 返回 (v7 ) 判断循环首 (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 判断循环尾 () 返回 (字节数组到字节集 (v5 )) |
RC4Base | 字节集 | | |
arg9 | 字节集 | | | | arg10 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | v4 | 整数型 | | | v6 | 整数型 | | | v1 | 字节型 | | 0 | v2 | 字节型 | | 0 | v0 | 整数型 | | | v3 | 字节型 | | | 字节集到字节数组 (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 | 整数型 | | | 字节集到字节数组 (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 = 字符数组到文本 (v8 )返回 (v9 ) |
RC4_Decode | 文本型 | | |
arg4 | 文本型 | | | | arg5 | 文本型 | | | |
v1 = 到文本 (RC4Base (HexString2Bytes (arg4 ), arg5 )) 返回 (v1 )
忽略了所有try-catch结构和部分非空(!=null)判断,可能比较随意,也没什么大问题,自己优化吧。
预告:目前正在翻译论坛的易代码插件(dz内部名称ecode)……
|
评分
-
查看全部评分
|