www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > strongerHuang
[導(dǎo)讀]關(guān)注、 星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容 素材來源:網(wǎng)絡(luò) 編輯整理:strongerHuang UART有一個(gè)奇偶校驗(yàn),CAN通信有CRC校驗(yàn)。Modbus、MAVlink、USB等通信協(xié)議也有校驗(yàn)信息。 在自定義數(shù)據(jù)存儲(chǔ)時(shí),有經(jīng)驗(yàn)的工程師都會(huì)添加一定校驗(yàn)信息。 你平時(shí)通信,或者數(shù)據(jù)存儲(chǔ)時(shí)


關(guān)注、 星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容

素材來源:網(wǎng)絡(luò)

編輯整理:strongerHuang


UART有一個(gè)奇偶校驗(yàn),CAN通信有CRC校驗(yàn)。Modbus、MAVlink、USB等通信協(xié)議也有校驗(yàn)信息。


在自定義數(shù)據(jù)存儲(chǔ)時(shí),有經(jīng)驗(yàn)的工程師都會(huì)添加一定校驗(yàn)信息。


你平時(shí)通信,或者數(shù)據(jù)存儲(chǔ)時(shí),你有用到校驗(yàn)信息嗎?下面就介紹幾種常見的校驗(yàn)算法。


一、校驗(yàn)和

校驗(yàn)和是最基本,也是嵌入式工程師最常用的一種校驗(yàn)算法,其實(shí)現(xiàn)方法很簡(jiǎn)單,簡(jiǎn)單到只有幾行代碼。


實(shí)現(xiàn)的方式方法很多,不同的編程語言,不同的應(yīng)用有所不同,下面以C語言8位校驗(yàn)和為例:

uint8_t CheckSum(uint8_t *Buf, uint8_t Len){ uint8_t i = 0; uint8_t sum = 0; uint8_t checksum = 0;
for(i=0; i<Len; i++) { sum += *Buf++; }
checksum = sum & 0xff;
return checksum;}


二、異或校驗(yàn)

【異或校驗(yàn)與【校驗(yàn)和類似,對(duì)數(shù)據(jù)進(jìn)行“異或”,最終得到一個(gè)“異或值”。

uint8_t CheckXOR(uint8_t *Buf, uint8_t Len){ uint8_t i = 0; uint8_t x = 0;
for(i=0; i<Len; i++) { x = x^(*(Buf+i)); }
return x;}


校驗(yàn)和、異或校驗(yàn)的方式有很多種,比如有的還會(huì)傳入一個(gè)參數(shù)作為異或校驗(yàn)的值。


當(dāng)然,以上代碼僅供學(xué)習(xí)參考,實(shí)際應(yīng)用需結(jié)合項(xiàng)目情況修改代碼。


三、CRC校驗(yàn)

CRC:Cyclic Redundancy Check,即循環(huán)冗余校驗(yàn)。


CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯(cuò)功能,對(duì)數(shù)據(jù)進(jìn)行多項(xiàng)式計(jì)算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。(來自網(wǎng)絡(luò))


CRC校驗(yàn)屬于冗余校驗(yàn)中的一種,大學(xué)學(xué)計(jì)算機(jī)相關(guān)專業(yè)的同學(xué)都應(yīng)該學(xué)過CRC校驗(yàn)(學(xué)習(xí)時(shí)可能沒幾個(gè)同學(xué)搞明白了)


CRC有多種變體,比如:CRC-1、 CRC-5-USB、 CRC-8、 CRC-16、 CRC-32、 CRC-64等。其中,在嵌入式領(lǐng)域,CRC-16用的比較多。


常見CRC參數(shù)模型:


比如一種在單片機(jī)上實(shí)現(xiàn)CRC16的源碼:

uint8_t CRCTAB_H[256] = {/*表省略*/};uint8_t CRCTAB_L[256] = {/*表省略*/};void CRC16(uint8_t *pData, uint8_t Len, uint8_t *CRC_H, uint8_t *CRC_L){ uint8_t i; uint8_t index; uint8_t crc_h = 0xFF; uint8_t crc_l = 0xFF;
for(i=0; i<Len; i++) { index = crc_h^*(pData + i); crc_h = crc_l^CRCTAB_H[index]; crc_l = CRCTAB_L[index]; }
*CRC_H = crc_h; *CRC_L = crc_l;}


CRC校驗(yàn)不同場(chǎng)景實(shí)現(xiàn)方式不同,網(wǎng)上也有很多公開的庫(kù)和源碼,比如:

LibCRC – C語言中的開源CRC庫(kù):

https://github.com/lammertb/libcrc


網(wǎng)上還有在線計(jì)算CRC校驗(yàn)值以及代碼生成工具,感興趣的讀者可以自行了解。

四、MD5算法

MD5:Message-Digest Algorithm 5,即“信息-摘要算法。


從名字來看就知道它是從MD3、MD4發(fā)展而來的一種加密算法,其主要通過采集文件的信息摘要,以此進(jìn)行計(jì)算并加密。


通過MD5算法進(jìn)行加密,文件就可以獲得一個(gè)唯一的MD5值,這個(gè)值是獨(dú)一無二的,就像我們的指紋一樣,因此我們就可以通過文件的MD5值來確定文件是否正確,密碼進(jìn)行加密后也會(huì)生成MD5值,論壇就是通過MD5值來驗(yàn)證用戶的密碼是否正確的。

MD5是輸入不定長(zhǎng)度信息,輸出固定長(zhǎng)度128-bits的算法。經(jīng)過程序流程,生成四個(gè)32位數(shù)據(jù),最后聯(lián)合起來成為一個(gè)128-bits散列?;痉绞綖椋笥?、取余、調(diào)整長(zhǎng)度、與鏈接變量進(jìn)行循環(huán)運(yùn)算。得出結(jié)果。


MD5的源碼在網(wǎng)上都能找到現(xiàn)成的,而且有不同編程語言(C、 C++、 JAVA)版本。


比如由網(wǎng)友talent518分享的C語言版本:

https://github.com/talent518/md5


五、其他算法

隨著變成技術(shù)越來越發(fā)達(dá),校驗(yàn)算法也越來越多,有通用的算法,也有特殊領(lǐng)域特定的算法。

比如我之前做過密碼相關(guān)的開發(fā),使用了由密碼管理局發(fā)布的SM3密碼雜湊算法。

還有從MD4算法改進(jìn)而來的SHA-1算法(Secure Hash Algorithm 1即安全散列算法1)。

本文就分享到這里,市面上的校驗(yàn)算法還有很多,如有需要可進(jìn)一步了解。


免責(zé)聲明: 本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我聯(lián)系刪除。

推薦閱讀:
為什么IoT設(shè)備的操作系統(tǒng)選用RTOS
從大端CPU遷移到小端CPU的技術(shù)
分享一篇專治MCU各種 HardFault 的庫(kù)

關(guān)注 微信公眾號(hào)『strongerHuang』,后臺(tái)回復(fù)“1024”查看更多內(nèi)容,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉