为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

SM4加解密易语言源码

三叶资源网 2019-04-27 15:07:55 易语言例程 1611 ℃ 0 评论

SM4加解密易语言源码

@开始学易语言

.版本 2

.程序集 程序集3

.子程序 位运算_左移_长整数型_ASM, 长整数型
.参数 数值, 长整数型
.参数 位数, 整数型

' 置入代码 (#shl64)
置入代码 ({ 139, 69, 8, 139, 85, 12, 139, 77, 16, 131, 249, 64, 124, 8, 49, 192, 49, 210, 201, 194, 12, 0, 131, 249, 32, 124, 23, 116, 13, 131, 233, 32, 211, 224, 137, 194, 49, 192, 201, 194, 12, 0, 137, 194, 49, 192, 201, 194, 12, 0, 15, 165, 194, 211, 224, 201, 194, 12, 0 })
返回 (0)

.子程序 位运算_右移_长整数型_ASM, 长整数型
.参数 数值, 长整数型
.参数 位数, 整数型

' 置入代码 (#shr64)
置入代码 ({ 139, 69, 8, 139, 85, 12, 139, 77, 16, 131, 249, 64, 124, 8, 49, 192, 49, 210, 201, 194, 12, 0, 131, 249, 32, 124, 23, 116, 13, 131, 233, 32, 137, 208, 211, 232, 49, 210, 201, 194, 12, 0, 137, 208, 49, 210, 201, 194, 12, 0, 15, 173, 208, 211, 234, 201, 194, 12, 0 })
返回 (0)

.子程序 取变量数据地址_ASM, 整数型
.参数 变量, 通用型, 参考
.参数 数据类型, 整数型, 可空

置入代码 ({ 139, 69, 8, 131, 125, 12, 9, 15, 142, 15, 0, 0, 0, 139, 0, 131, 125, 12, 11, 15, 133, 3, 0, 0, 0, 131, 192, 8, 201, 194, 12, 0 })
' mov eax, dword ptr [ebp+08h]
' cmp dword ptr [ebp+0Ch], 09h
' jng 009F968Ch
' mov eax, dword ptr [eax]
' cmp dword ptr [ebp+0Ch], 0Bh
' jne 009F968Ch
' add eax, 08h
' leave
' retn 000Ch

返回 (0)

.子程序 进制_字节集到十六进制_ASM, 文本型, , 返回把字节集数据转换为16进制数据文本,每2个字符为1字节数据
.参数 字节集数据, 字节集, , 待转换字节集数据.
.参数 分隔符号, 文本型, 可空, 分隔符的作用就是 FF分隔FF分隔FF  空=""=不分隔.
.参数 保留参数, 整数型, 可空, 此参数不需要使用.
.局部变量 十六进制, 文本型, , , 保存转换后的十六进制.若空,以返回值返回结果

保留参数 = 取字节集长度 (字节集数据)
.如果真 (保留参数 > 0)
    十六进制 = 取重复文本 (保留参数, “00” + 分隔符号)
    保留参数 = 取变量数据地址_ASM (十六进制, #文本型)

    ' 0040357E    837D 10 00             cmp     dword ptr [ebp+10], 0            ; 分隔为空?
    ' 00403582    74 17                  je      short 0040359B                   ; 为空 跳
    ' 00403584    FF4D 10                dec     dword ptr [ebp+10]               ; 分隔长度=0
    ' 00403589    8B45 0C                mov     eax, dword ptr [ebp+C]           ; EAX=参数2
    ' 0040358C    85C0                   test    eax, eax
    ' 0040358E    74 0D                  je      short 0040359D                   ; 空参 跳
    ' 00403590    8B00                   mov     eax, dword ptr [eax]             ; EAX=分隔符
    ' 00403592    8038 00                cmp     byte ptr [eax], 0
    ' 00403595    74 06                  je      short 0040359D                   ; 终止 跳
    ' 00403597    FF45 10                inc     dword ptr [ebp+10]               ; 递增长度
    ' 0040359A    40                     inc     eax                              ; 递增地址
    ' 0040359B  ^ EB F5                  jmp     short 00403592                   ; 继续循环
    ' 0040359D    90                     nop
    ' 0040359E    51                     push    ecx                              ; 备份ECX
    ' 0040359F    52                     push    edx                              ; 备份EDX
    ' 004035A0    53                     push    ebx                              ; 备份EBX
    ' 004035A1    56                     push    esi                              ; 备份ESI
    ' 004035A2    57                     push    edi                              ; 备份EDI
    ' 004035A3    8B45 08                mov     eax, dword ptr [ebp+8]           ; EAX=参数1
    ' 004035A6    8B00                   mov     eax, dword ptr [eax]             ; EAX=字节集首
    ' 004035A8    8B48 04                mov     ecx, dword ptr [eax+4]           ; ECX=字节集长
    ' 004035AB    83C0 08                add     eax, 8                           ; EAX=字节集指针
    ' 004035AE    8BF0                   mov     esi, eax                         ; EBX=字节集指针
    ' 004035B0    8B7D 14                mov     edi, dword ptr [ebp+14]          ; EDI=十六文本
    ' 004035B3    33C0                   xor     eax, eax                         ; EAX=0
    ' 004035B5    BB 10000000            mov     ebx, 10                          ; EBX=16除数
    ' 004035BA    90                     nop
    ' 004035BB    85C9                   test    ecx, ecx                         ; 长度=0?
    ' 004035BD    74 23                  je      short 004035E2                   ; 等于0 跳
    ' 004035BF    49                     dec     ecx                              ; 递减长度
    ' 004035C0    8A06                   mov     al, byte ptr [esi]               ; 取1字节
    ' 004035C2    33D2                   xor     edx, edx                         ; EDX=0 余
    ' 004035C4    F7F3                   div     ebx                              ; 除以16
    ' 004035C6    83F8 0A                cmp     eax, 0A                          ; 商>10
    ' 004035C9    72 03                  jb      short 004035CE                   ; 小于 跳
    ' 004035CB    83C0 07                add     eax, 7                           ; 英文 + 55
    ' 004035CE    0007                   add     byte ptr [edi], al               ; 英文 + 48
    ' 004035D0    47                     inc     edi                              ; 递增文本
    ' 004035D1    83FA 0A                cmp     edx, 0A                          ; 余>10
    ' 004035D4    72 03                  jb      short 004035D9                   ; 小于 跳
    ' 004035D6    83C2 07                add     edx, 7                           ; 英文 + 55
    ' 004035D9    0017                   add     byte ptr [edi], dl               ; 英文 + 48
    ' 004035DB    47                     inc     edi                              ; 递增文本
    ' 004035DC    037D 10                add     edi, dword ptr [ebp+10]          ; 跳过分隔符
    ' 004035DF    46                     inc     esi                              ; 递增字节集
    ' 004035E0  ^ EB D9                  jmp     short 004035BB                   ; 继续循环
    ' 004035E2    90                     nop
    ' 004035E3    397D 14                cmp     dword ptr [ebp+14], edi          ; 处理过数据
    ' 004035E6    74 01                  je      short 004035E9                   ; 未处 跳
    ' 00401019    2B7D 10                sub     edi, dword ptr [ebp+10]          ; 递减文本
    ' 004035E9    880F                   mov     byte ptr [edi], cl               ; 截断字符
    ' 004035EB    5F                     pop     edi                              ; 恢复EDI
    ' 004035EC    5E                     pop     esi                              ; 恢复ESI
    ' 004035ED    5B                     pop     ebx                              ; 恢复EBX
    ' 004035EE    5A                     pop     edx                              ; 恢复EDX
    ' 004035EF    59                     pop     ecx                              ; 恢复ECX
    ' 83 7D 10 00 74 17 FF 4D 10 8B 45 0C 85 C0 74 0D 8B 00 80 38 00 74 06 FF 45 10 40 EB F5 90 51 52 53 56
    ' 57 8B 45 08 8B 00 8B 48 04 83 C0 08 8B F0 8B 7D 14 33 C0 BB 10 00 00 00 90 85 C9 74 23 49 8A 06
    ' 33 D2 F7 F3 83 F8 0A 72 03 83 C0 07 00 07 47 83 FA 0A 72 03 83 C2 07 00 17 47 03 7D 10 46 EB D9
    ' 90 39 7D 14 74 01 2B 7D 10 88 0F 5F 5E 5B 5A 59

    置入代码 ({ 131, 125, 16, 0, 116, 23, 255, 77, 16, 139, 69, 12, 133, 192, 116, 13, 139, 0, 128, 56, 0, 116, 6, 255, 69, 16, 64, 235, 245, 144, 81, 82, 83, 86, 87, 139, 69, 8, 139, 0, 139, 72, 4, 131, 192, 8, 139, 240, 139, 125, 20, 51, 192, 187, 16, 0, 0, 0, 144, 133, 201, 116, 35, 73, 138, 6, 51, 210, 247, 243, 131, 248, 10, 114, 3, 131, 192, 7, 0, 7, 71, 131, 250, 10, 114, 3, 131, 194, 7, 0, 23, 71, 3, 125, 16, 70, 235, 217, 144, 57, 125, 20, 116, 1, 43, 125, 16, 136, 15, 95, 94, 91, 90, 89 })

.如果真结束
返回 (十六进制)

.子程序 进制_十六进制到字节集_ASM, 字节集, , 返回把指定16进制文本数据还原为字节集.每个字节由2个字符组成
.参数 十六进制文本, 文本型, , 例如 {FF,0A,DA} 或者 FF,0A,DA 或者 FF0ADA 等等
.参数 保留参数, 整数型, 可空, 此参数不需要使用.
.局部变量 字节集, 字节集

字节集 = 到字节集 (十六进制文本)
保留参数 = 取变量数据地址_ASM (字节集, #字节集型)
' 00401226    50              push    eax                              ; 备份寄存器
' 00401227    51              push    ecx
' 00401228    52              push    edx
' 00401229    53              push    ebx
' 0040122A    56              push    esi
' 0040122B    57              push    edi                              ; 备份寄存器
' 0040122C    33C0            xor     eax, eax
' 0040122E    33C9            xor     ecx, ecx
' 00401230    33D2            xor     edx, edx
' 00401232    33DB            xor     ebx, ebx
' 00401234    8B75 08         mov     esi, dword ptr [ebp+8]           ; ESI=十六文本指针
' 00401237    8B7D 0C         mov     edi, dword ptr [ebp+C]           ; EDI=字节集指针
' 0040123A    85F6            test    esi, esi                         ; 空文本?
' 0040123C    74 04           je      short 00401242                   ; 空  跳
' 0040123E    8B36            mov     esi, dword ptr [esi]
' 00401240    85F6            test    esi, esi                         ; 空文本?
' 00401242    74 53           je      short 00401297                   ; 空  跳
' 00401244    90              nop
' 00401245    8A1E            mov     bl, byte ptr [esi]               ; 读取1字符
' 00401247    46              inc     esi                              ; 递增进制地址
' 00401248    80FB 30         cmp     bl, 30
' 0040124B    72 3D           jb      short 0040128A                   ; 非法字 跳
' 0040124D    80FB 39         cmp     bl, 39
' 00401250    77 05           ja      short 00401257                   ; 大于"9"跳
' 00401252    80EB 30         sub     bl, 30                           ; 0-9
' 00401255    EB 1D           jmp     short 00401274                   ; 数字区 跳
' 00401257    80FB 41         cmp     bl, 41
' 0040125A    72 2E           jb      short 0040128A                   ; 非法字 跳
' 0040125C    80FB 46         cmp     bl, 46
' 0040125F    77 05           ja      short 00401266                   ; 大于"F"跳
' 00401261    80EB 37         sub     bl, 37                           ; A-F
' 00401264    EB 0E           jmp     short 00401274                   ; 字母区 跳
' 00401266    80FB 61         cmp     bl, 61
' 00401269    72 1F           jb      short 0040128A                   ; 非法字 跳
' 0040126B    80FB 66         cmp     bl, 66                           ; 非法字 跳
' 0040126E    77 1A           ja      short 0040128A                   ; a-f
' 00401270    80EB 57         sub     bl, 57
' 00401273    90              nop
' 00401274    85C0            test    eax, eax                         ; 有无高位? 正常进制处理
' 00401276    75 05           jnz     short 0040127D                   ; 有高位跳
' 00401278    40              inc     eax                              ; 置有高位
' 00401279    8BD3            mov     edx, ebx                         ; 保存高位
' 0040127B  ^ EB C8           jmp     short 00401245                   ; 继续循环
' 0040127D    48              dec     eax                              ; 置无高位
' 0040127E    41              inc     ecx                              ; 递增长度
' 0040127F    C1E2 04         shl     edx, 4                           ; 左移高位
' 00401282    09DA            or      edx, ebx                         ; 合并字节
' 00401284    8817            mov     byte ptr [edi], dl               ; 保存字节
' 00401286    47              inc     edi                              ; 递增写入
' 00401287  ^ EB BC           jmp     short 00401245                   ; 继续循环
' 00401289    90              nop
' 0040128A    85C0            test    eax, eax                         ; 有无未存? 非法字符处理
' 0040128C    74 05           je      short 00401293                   ; 无未存跳
' 0040128E    48              dec     eax                              ; 置无未存
' 0040128F    41              inc     ecx                              ; 递增长度
' 00401290    8817            mov     byte ptr [edi], dl               ; 保存字节
' 00401292    47              inc     edi                              ; 递增写入
' 00401293    85DB            test    ebx, ebx                         ; 是否 {0}?
' 00401295  ^ 75 AE           jnz     short 00401245                   ; 继续循环
' 00401297    894D 0C         mov     dword ptr [ebp+C], ecx           ; 参数2=长度
' 0040129A    5F              pop     edi                              ; 恢复寄存器
' 0040129B    5E              pop     esi
' 0040129C    5B              pop     ebx
' 0040129D    5A              pop     edx
' 0040129E    59              pop     ecx
' 0040129F    58              pop     eax                              ; 恢复寄存器
' 50 51 52 53 56 57 33 C0 33 C9 33 D2 33 DB 8B 75 08 8B 7D 0C 85 F6 74 04 8B 36 85 F6 74 53 90 8A
' 1E 46 80 FB 30 72 3D 80 FB 39 77 05 80 EB 30 EB 1D 80 FB 41 72 2E 80 FB 46 77 05 80 EB 37 EB 0E
' 80 FB 61 72 1F 80 FB 66 77 1A 80 EB 57 90 85 C0 75 05 40 8B D3 EB C8 48 41 C1 E2 04 09 DA 88 17
' 47 EB BC 90 85 C0 74 05 48 41 88 17 47 85 DB 75 AE 89 4D 0C 5F 5E 5B 5A 59 58
置入代码 ({ 80, 81, 82, 83, 86, 87, 51, 192, 51, 201, 51, 210, 51, 219, 139, 117, 8, 139, 125, 12, 133, 246, 116, 4, 139, 54, 133, 246, 116, 83, 144, 138, 30, 70, 128, 251, 48, 114, 61, 128, 251, 57, 119, 5, 128, 235, 48, 235, 29, 128, 251, 65, 114, 46, 128, 251, 70, 119, 5, 128, 235, 55, 235, 14, 128, 251, 97, 114, 31, 128, 251, 102, 119, 26, 128, 235, 87, 144, 133, 192, 117, 5, 64, 139, 211, 235, 200, 72, 65, 193, 226, 4, 9, 218, 136, 23, 71, 235, 188, 144, 133, 192, 116, 5, 72, 65, 136, 23, 71, 133, 219, 117, 174, 137, 77, 12, 95, 94, 91, 90, 89, 88 })
返回 (取字节集左边 (字节集, 保留参数))

.子程序 位运算_位与_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型

置入代码 ({ 139, 69, 8, 35, 69, 16, 139, 85, 12, 35, 85, 20, 93, 194, 16, 0 })
返回 (0)

.子程序 位运算_位或_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型

置入代码 ({ 139, 69, 8, 11, 69, 16, 139, 85, 12, 11, 85, 20, 93, 194, 16, 0 })
返回 (0)

.子程序 位运算_位异或_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型

置入代码 ({ 139, 69, 8, 51, 69, 16, 139, 85, 12, 51, 85, 20, 93, 194, 16, 0 })
返回 (0)
文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
编码微信支付取指针卷帘式菜单微信网页版协议仿微信登录UI界面填表登录系统DPI缩放率任务栏缩略图下载器QQ好友计数器软件md5效验POST调试工具网页分析工具url编解码图形控件属性框Etorch喜马拉雅主播粉丝采集软件异常重启
最新评论