㈠ 請問什麼是異或校驗
異或校驗演算法(又稱為BCC校驗)
下面就是異或校驗的演算法,多用於串口通信:
#include "stdio.h"
void main()
{
int i;
//任意10個數值,也可以不是8位
unsigned char data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned char out;//用於保存異或結果
out=0x00;
for (i=0;i<sizeof(data);i++)
{
out^=data;
}
printf("原來的校驗值:%X ",out);
out^=(data[0]^0xee);//將data[0]改為新數據後計算新校驗和的方法
out^=(data[5]^0x20);//將data[5]改為新數據後計算新校驗和的方法
printf("修改後校驗值:%X ",out);
data[0]=0xee; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
data[5]=0x20; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
out=0x00;
for (i=0;i<10;i++)
{
out^=data;
}
printf("原始方法得出校驗值:%X ",out);
}
作用:
防止自己的程序被篡改。
有些可執行程序,當被改了資源時再運行會有文件已損壞的提示,這就是使用了數據校驗。本例是用md5做為數據校驗的演算法。當然你可以使用個性化的比如des作為數字簽名,那樣安全性更高。
(1)單片機異或校驗擴展閱讀:
最簡單的檢驗
實現方法:最簡單的校驗就是把原始數據和待比較數據直接進行比較,看是否完全一樣這種方法是最安全最准確的。同時也是效率最低的。
應用例子:龍珠cpu在線調試工具bbug.exe。它和龍珠cpu間通訊時,bbug發送一個位元組cpu返回收到的位元組,bbug確認是剛才發送位元組後才繼續發送下一個位元組的。
奇偶校驗Parity Check
實現方法:在數據存儲和傳輸中,位元組中額外增加一個比特位,用來檢驗錯誤。校驗位可以通過數據位異或計算出來。
應用例子:單片機串口通訊有一模式就是8位數據通訊,另加第9位用於放校驗值。
md5校驗和數字簽名
實現方法:主要有md5和des演算法。
適用范圍:數據比較大或要求比較高的場合。如md5用於大量數據、文件校驗,des用於保
密數據的校驗(數字簽名)等等。
應用例子:文件校驗、銀行系統的交易數據
參考資料:網路-數據校驗