Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 7727|回復: 2
打印 上一主題 下一主題

[問題求助] 关于循环冗余校验CRC

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-6-17 01:10:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
CRC(Cyclic redundancy check)也就是循环冗余校验,是一种检验错误的方法,尤其在数据传输的时候,在发送端和接收端用同样的方法得到一个数字,然后接受端用该值和接收到的校验和进行比较。如果相同,则表示传送无误,可以处理数据。否则就是传送失败,并采取相应措施。1 _1 H* s/ J  R7 d
) x9 V( t" p4 u  [1 B# S( F7 |
我一直以为CRC就是简单的用相加的方法得到一个校验和(checksum),就像我们原来计算BIOS的校验和一样。crc8就是把所有的字节相加,得到一个8位的结果,crc16就是把所有的short相加,得到一个16位的结果,crc32就是把所有的整数相加,……以此类推。
5 a( \4 k6 N% ~8 B: {& G2 O9 U; `5 ?$ E+ r* R* F6 E, y
但是,直到我真正开始做这个,才发现根本没有这么简单。这只是最基本的做法,虽然广泛使用(比如tcp标准校验和采用的就是该方法),但是却有着其本身不可克服的局限性。比如在传输数据时,如果数据本身和校验和都产生一位错误,就极有可能导致接受端发出错误的判断。所以crc才有很多变种,而且其最基本的数学原理也不是加法,而是除法,而且是多项式除法并取余。也就是用精心挑选的除数去除原数据,剩下的N位余数就是crc的结果。3 ?. `3 @5 p' w" a+ s5 p

- r9 V3 T) ^. C* g! |crc也不是以字节或整数为操作单位的,而是以比特为单位,只是人们为了简化运算,才有了以字节为单位的运算,才有了XOR,而非DIV的做法。而且为了对每一个原数据的位进行操作,才有了我们今天的查表法,也就是根据当前已得到的crc值和新输入的字节,产生一个索引,从表中查出相应数据,再和变化过的crc值进行异或,产生新的crc值。如此循环,直至所有的输入字节都处理完毕。
5 r* J1 _: r: n1 ^* {0 n+ i& y. c* Z/ E& i0 C+ H5 p0 q
crc虽然广泛用于全球标准化通讯系统中,但是并没有真正被标准化。大部分目前使用的crc都根据其长度和结构有着或多或少的弱点。现在主要用到的crc16采用的是CCITT的标准,而crc32用的是IEEE 802.3的标准。另外alder算法也非常流行,有兴趣的可以参考维基的英文网页,以crc为关键字查询,将得到非常详细的答案和参考书目。0 b$ I: W! A8 x* x( l: @

: N3 m. L4 E7 C因为crc是一个线形运算,所以易于破解,很难用于数据保护。一个比crc更有效地保护数据的方法就是one-way hash算法,也就是根据输入数据做运算,最后产生一段固定的输出。而其过程是非逆的。也就是说,你可以根据该算法轻易地得到输出,却几乎不可能根据输出来推断你的输入。比较流行的hash算法有MD5和SHA1以及SHA的各种变形。但随着技术的日新月异,MD5已经被证明不够安全,SHA1也被中国的教授发现了其弱对撞性。看来安全的路未来还很长。

評分

參與人數 1 +5 收起 理由
masonchung + 5 你的經驗就是知識的來源!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-6-17 15:45:44 | 只看該作者

A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS

不知這個錯誤偵測的方法如何~:o
, S3 j5 k* H+ i  {. F7 m$ @9 u0 xTable of Contents & l6 I6 P) R+ I, f% z) m1 a7 }
1. Preface ' P9 f* D" X" v/ F' L/ N6 [
  1.1) About the Author & Copyright : ~, Q# y/ K. n4 }
  1.2) Abstract
0 J4 F! H* @- @, {9 [" e' ~; x2. Introduction: Error Detection 4 R5 A/ ^9 f3 y- m2 T
3. The Need For Complexity
+ }) x( p4 L/ Z- y% H2 U) H9 F4. The Basic Idea Behind CRC Algorithms : z& z4 }) j2 Y- J/ Q
5. Polynomical Arithmetic % s4 ^2 u7 }/ O- M* S
Chapter 6) Binary Arithmetic with No Carries
1 f* G1 x7 ]2 A5 T, K1 JChapter 7) A Fully Worked Example * L  G; {( m/ }( \' y  z9 x
Chapter 8) Choosing A Poly
7 h) V* r. d9 j& h5 g* JChapter 9) A Straightforward CRC Implementation 1 Q$ k# L$ \* w: d8 A: _
Chapter 10) A Table-Driven Implementation
( `  `0 y/ P8 s  M3 s, FChapter 11) A Slightly Mangled Table-Driven Implementation 5 h! q% M5 z3 W& s. Y/ l
Chapter 12) "Reflected" Table-Driven Implementations
0 R  D% \& R- i' W/ a% z8 h2 g, l8 rChapter 13) "Reversed" Polys 6 S( p/ s, ?6 m' k2 u' b+ ]' h
Chapter 14) Initial and Final Values % v# M5 _9 L3 w9 s
Chapter 15) Defining Algorithms Absolutely
! o6 `) B0 }. ~/ _6 e+ HChapter 16) A Parameterized Model For CRC Algorithms
* L; j, @1 k0 h- y3 z1 a( w# f6 Z0 eChapter 17) A Catalog of Parameter Sets for Standards
( _& X# u" T5 Q( Q3 e& F: M  k( OChapter 18) An Implementation of the Model Algorithm ' ]. V( R, ^# c; n- f0 I5 c
Chapter 19) Roll Your Own Table-Driven Implementation 3 o0 w- G* [1 H$ x1 v# V' s
Chapter 20) Generating A Lookup Table
) g& r3 t4 e8 l  J1 K: u0 dChapter 21) Summary 2 Q0 Q. e; ^* g
Chapter 22) Corrections
) R! Y/ r0 {4 o0 y9 PChapter 23) Glossary 7 h! U- z' g; e. I5 l
Chapter 24) References
# N4 K8 g* _( e" R* aChapter 25) References I Have Detected But Haven't Yet Sighted
8 S1 c6 Z2 N& J3 X4 |# Y+ b0 [" G1 o) W1 T
http://www.repairfaq.org/filipg/LINK/F_crc_v3.html
3#
 樓主| 發表於 2007-6-18 19:32:13 | 只看該作者
哎呀,太复杂了,不过原理应该是一样的。我这里有一个不错的文档,让我试试看上传
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-23 03:53 PM , Processed in 0.114014 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表