SQL SERVER数据页checksum校验算法
在SQL SERVER2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4字节。 其算法概述如下: 读8KB 进BUF 将BUF头部 CHECKSUM的4字节值清0 uint32 checksum = 0 //初始checksum for i in range(0,15): //每扇区的初始checksum overall = 0; for ii in range(0,127): //对当前扇区的每个4字节做累加异或 overall = overall ^ BUF[i][ii]; //对每扇区的checksum进行移位,方法为向左移位15-i位, //左边移出的15-i位补到最低位。 checksum = checksum ^ rol(overall, 15- i); return checksum; //Gets checksum c源码如下: //***CODE***// #include <stdio.h> #include <stdlib.h> #define seed 15 //Initial seed(for first sector) #define CHAR_BIT 8 //***PROTOTYPES***// unsigned int page_checksum