循环冗余码CRC的不明白的问题?余数循环怎么循环不起来?

jhyu119 2003-08-20 05:10:51
看来老顽童网站的文章,很是受益,但是他写的余数循环怎么循环不起来呀?
http://oldchild.nbc.net.cn/spks/jym.htm

信息码1010;生成多项式1011

求得得冗余码为1010 011(由左到右为A7、A6、A5、A4、A3、A2、A1);
当A1到A7分别出错时,余数分别为000、001、010、100、011、110、111、101);
可是将这7个余数分别除以生成多项式1011,并不能形成循环??纳闷??
请过来人指点??
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
warren248 2003-10-08
  • 打赏
  • 举报
回复
不好意思,更正啊,我也觉得好像循环不起来啊。有没有人指点啊
htsr 2003-10-08
  • 打赏
  • 举报
回复
知道怎么算就可以了
toyjoy 2003-10-08
  • 打赏
  • 举报
回复
各位钻研得可真深啊!^ō^

能过考试就行了哈!


langame 2003-08-22
  • 打赏
  • 举报
回复
给个例题如下:
多项式为:G(x)=x^4+x^3+x+1,原始报文为11001010101,请问这个多项式是什么?解:
1、将生成多项式转换成对应的二进制除数:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0)。则:
g(x)=x4+x3+x+1 可转换为11011
2、此题生成多项式有5位,要把原始报文左移4位变成110010101010000
3、用生成多项式对应的二进制数去(模2)除左移4位后的原始报文,也就是说,每一位除(实际是减)的结果不影响其它位,即不向上一位借位。所以实际上就是移位加异或。
商: 10011111001
------------------------
被除数 110010101010000
除数 1101111
------------
0010010
11011
------------
10011
11011
------------
10000
11011
------------
10111
11011
------------
11000
11011
------------
0011000
11011
------------
余数(校验位) 0011
5、编码后的报文(CRC码):
110010101010000
+ 0011
------------------
110010101010011
因计算较烦,可能出错,请校对。
nettman 2003-08-22
  • 打赏
  • 举报
回复
除数:1101111
应该为:11011(可能是写多了^_^)!
jjsshen 2003-08-21
  • 打赏
  • 举报
回复
我想应该是这样:
1010 011 / 1011 余 000 无错误
1010 010 / 1011 余 001 A1错,取反
1010 001 / 1011 余 010 A2错,取反
1010 100 / 1011 余 100 A3错,取反
1011 011 / 1011 余 011 A4错,取反
1000 011 / 1011 余 110 A5错,取反
1110 011 / 1011 余 111 A6错,取反
0010 011 / 1011 余 101 A7错,取反
jhyu119 2003-08-21
  • 打赏
  • 举报
回复
没有人指点么?
warren248 2003-08-21
  • 打赏
  • 举报
回复
对了,可能是你理解错了。当A1错时收到的是:1010010(与正确相比),不是将1010与000相拼起来再除1011。
pldchild 2003-08-21
  • 打赏
  • 举报
回复
这段话是原封不动抄王爱英《计算机组成与结构》的,自己没有经过验算。看了大家的帖子我又仔细看了该书,好像是有些问题,这个问题我在开学后会和其他组成原理老师讨论的。对你的钻研精神表示钦佩。 老顽童
warren248 2003-08-21
  • 打赏
  • 举报
回复
会的,假如收到的字为:1010-010。进行操作:除1011得到的余数:001,则判定是第一位(也就是后一位与1010011相比较)。
易语言 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文件中,然后多放几个需要验证的子程序,随时以备调用即可。

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧