易语言CRC16校验

.版本 2

.子程序 CRC16_MODBUS, 整数型, , CRC16_MODBUS查表算法
.参数 欲校验的整数, 字节集
.局部变量 crc, 整数型
.局部变量 table, 整数型, , "256"
.局部变量 i, 整数型

' Name:    CRC-16/MODBUS  X16+X15+X2+1
' Poly:    0x8005
' lnit:    0xFFFF
' Refin:   Ture
' Refout:  Ture
' Xorout:  0x0000
' Note:
' —————————————————输入、输出反转、结果不异或————————————————————
.变量循环首 (0, 255, 1, i)
    crc = i
    .变量循环首 (1, 8, 1, )
        .如果 (位与 (crc, 1) ≠ 0)
            crc = 位异或 (右移 (crc, 1), 40961)  ' // 多项式 “0xA001”= Reverse “0x8005”
        .否则
            crc = 右移 (crc, 1)
        .如果结束

    .变量循环尾 ()
    table [i + 1] = crc
.变量循环尾 ()
crc = 65535  ' // 初始值“0xFFFF”)
.变量循环首 (1, 取字节集长度 (欲校验的整数), 1, i)
    crc = 位异或 (右移 (crc, 8), table [位异或 (欲校验的整数 [i], 位与 (crc, 255)) + 1])
.变量循环尾 ()
返回 (crc)
 

易语言 CRC32.ec校验模块 林子深作品 比其他的都便宜 CRC32.ec校验模块 林子深作品 下载 CRC32.ec校验模块下载 我们很有必要给自己的软件加上更好的保护。CRC校验就是其中的一种不错的方法。 CRC是什么东西呢?其实我们大家都不应该会对它陌生,回忆一下?你用过RAR和ZIP等压缩软件吗?它们是不是常常会给你一个恼人的“CRC校验错误”信息呢?我想你应该明白了吧,CRC就是块数据的计算值,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,“CRC校验”就是“循环冗余校验”。 CRC有什么用呢?它的应用范围很广泛,最常见的就是在网络传输中进行信息的校对。其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。呵呵,是不是很厉害呢?所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被奸人用16进制工具暴力破解过了。 CRC的本质是进行XOR运算,运算的过程我们不用管它,因为运算过程对最后的结果没有意义;我们真正感兴趣的只是最终得到的余数,这个余数就是CRC值。 易语言用户林子深提供了一个CRC32.EC的易模块,这个模块可以在论坛上或资源网上搜索到。大家可以直接拿过来用,导入易语言后如下图所示: 调用方式可为如下代码: 判断(取循环风俗冗余校验和(读入文件(取执行文件名()))= 18293823767) 其中上述的数字为主程序的CRC码值。 大家可以利用上述特性,即结果是数值的特性,不用进行比较,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否则就是被改过的。 例如下述代码: 程序被改 = 1 计次循环首(取绝对值(取循环风俗冗余校验和(读入文件(取执行文件名()))- 18293823767),) 程序被改 = 0- 跳出循环() 计次循环尾() 返回(程序被改) 上述代码中,“取绝对值()”是将负数也转换为正数,以方便进行计次循环。 上述代码中,数值型变量“程序被改”为1表示没有被改动过,如果为0表示被改动过。返回的数值就可以进行一些陷阱的计算了。 我的方案的缺点分析: CRC-32的值其实可以由奸人自行计算得出后,重新写入到程序验证处。这样的话,我们做的工作岂不是没有意义了? 其实解决的方法还是有的,我们可以在计算CRC-32值之前,对参与转换的字符串加点手脚,例如对这个字符串进行移位、xor等操作,或者把自己的生日等信息加入到字符串中,随你的便什么都行,总之不是单纯的文件的内容就行了,然后在最后比较的时候,也用同样的方法反计算出CRC-32值。这样得到的CRC-32就不是由文件的内容计算出来的,相信对破解者的阻力也会加大不少。 总结: 以上的方法大家都可以在软件中采用,最好写到一个DLL文件中,然后多放几个需要验证的子程序,随时以备调用即可。
CRC32是一种循环冗余校验机制,可以用于数据完整性校验易语言是一种类似于基础编程语言的高级编程语言,可以通过编写代码来实现CRC32自校验。 在易语言中,我们可以使用相关的函数来计算CRC32校验值。下面是一个简单的示例代码来实现CRC32自校验: ```python # 引入相关的库文件 执行框.载入DLL函数模块("crc32.dll") # 定义待校验的数据 data = "Hello World!" # 调用CRC32计算函数 crc32_result = 调用DLL函数("crc32.dll", "CRC32字符串表 校验_16进制", data) # 将校验结果输出 执行框.提示框("CRC32校验值为:" + crc32_result) ``` 以上代码中,我们首先使用`载入DLL函数模块`函数将`crc32.dll`文件加载进来,然后定义了待校验的数据为字符串"Hello World!"。接下来,我们调用`调用DLL函数`函数来调用CRC32计算函数,指定使用的是CRC32字符串表的校验方式,并将结果保存在`crc32_result`变量中。最后,我们使用`提示框`将CRC32校验值输出到对话框中。 通过以上代码,我们可以实现CRC32的自校验功能。当我们接收到一个数据后,可以通过计算CRC32校验值,然后与接收到的校验值进行比较,如果一致,则说明数据没有被修改过,否则可能存在传输错误或数据篡改的情况。 需要注意的是,以上的示例只是简单演示了如何在易语言中使用CRC32计算函数来实现校验,实际应用中可能需要根据实际情况进行更多的处理和封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值