crc校验码:CRC校验码为BMP图设置水印



  2、 BMP位图内部结构

  由于邮件接收方必须根据收到仅有个文件(此处为幅BMP位图)对其原始性做出判断那么用来标识该文件信息只有隐藏在该文件中才能被接收者识别出来而且该信息不能隐藏到文件内容信息区中(此处为位图点阵)如果这样话在设置印鉴同时就已经把原始内容破坏了文件也就失去了原始性了因此我们所设置印鉴水印必须设置到标识文件结构保留字段中所以在处理的前有必要对文件内部结构作些了解下表就是我们所要研究对象BMP位图内部结构:

文件块 类型 字段 地址 介绍说明
BMP文件头 Int BfType 0--1 规定必须是\"BM\"作为识别BMP文件标志
Long BfSize 2--5 给出了文件长度单位为字节
Int BfReserved1 6--7 保留平时为0
Int BfReserved2 8--9 保留平时为0
Long BfOffbits 10--13 给出了位图阵列相对于文件头偏移
点位图信息 Long Width 18--21 给出了位图宽度
Long Height 24--27 给出了位图高度
Int BitCount 28--29 像素位数如24为24位真彩、8为256色等
Long BitSizeImage 34--37 确定图像字节数多少但通常此项为0
位图阵列 从第38字节开始位图阵列中保存有全部图像像素RGB 3分量值


  从上表可以看出我们设置印鉴水印只能放在第6--9字节的间这两段保留字段中才不会破坏文件内容和整体结构

   3、用CRC校验码作为印鉴可靠性能

  在网络通讯中经常会用到CRC循环冗余校验码并广泛应用于报文检错在网络中对报文检错工作环境同本文有些类似:都是接收方根据发送方发来数据来判断这段数据到底是不是同发送方发送时内容我们不妨把发送方发送出来BMP位图当作个大报文对其加上CRC校验把通常放在帧尾CRC校验码放到BMP位图保留字段中这样接收方只须象网络中检验报文样看看校验码正确和否即可断定出该位图是否被作过处理

  CRC校验码是基于将位串看作是系数为0或1多项式个k位数据流可以看作是有关x从k-1阶到0阶k次多项式系数序列采用此编码发送方和接收方必须事先商定个生成多项式G(x)其高位和低位必须是1要计算m位帧M(x)校验和基本思想是将校验和加在帧末尾使这个带校验和多项式能被G(x)除尽当接收方收到加有校验和帧时用G(x)去除它如果有余数则CRC校验只有没有余数校验才是正确具体计算校验和算法如下:

  1. 设G(x)为r阶在帧末尾附加r个0将帧扩展到m+r位长

  2. 按模2除法用对应于G(x)位串去除对应于扩展后M(x)位串

  3. 按模2减法从对应于扩展后M(x)位串中减去余数其结果就是要传送带校验和帧T(x)了

  我们在使用的前有必要对该校验思路方法可靠性能做下分析如果内容数据做了改动正确T(x)位串变成了T(x)+E(x)在E(x)中每位都对应着要转换如果E(x)中有k个1位那么就会发生k个单个旦接收方用G(x)去除即计算[T(x)+E(x)]/G(x),而T(x)/G(x)=0,所以其结果为E(x)/G(x)除了是G(x)整倍数多项式差错检测不到以外其他都可以捕获到如果E(x)中发生单个位(I 位)若G(x)包括至少I项就永远也除不尽E(x)换句话说所有单个位都可以被检测出来另外如果集中差错长度为r+1时而且当集中差错和G(x)样时被G(x)除余数也可能为0根据集中差错定义第位和最后位必须是1因此集中差错是否同G(x)样取决于其余r-1位如果所有0、1排列情况出现概率均等那么图片被更改而没有被检出概率就是1/2^(r-1)按照现在流行 4种已成为国际标准多项式:V.41CRC-CCITT、ANSICRC-16以及CRC-12和CRC-32他们r值分别为16、16、12、32漏检概率在0.00000000002~0.000244的间这样概率还是令人满意

  经过以上分析采用CRC循环冗余校验码作为检测BMP位图是否被改动印鉴水印是可靠、合理接下来就通过段Microsoft Visual C 6.0片段来完成对此算法具体实现
Tags:  校验码 crc循环冗余校验码 crc校验码的计算 crc校验码

延伸阅读

最新评论

发表评论