|
< align=center>下面这段程序是什么编的并给出完整模式</P>
<>for(DWORD i=54;i<BaseFileLen;i++) {
Temp=((HideData[j]&224)>>5)<<5; </P>
<>BaseData=HideCalculate(BaseData,Temp); </P>
<P>i++;
Temp=((HideData[j]&28)>>2)<<5; </P>
<P>BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=(HideData[j]&3)<<1;
j++; </P>
<P>Temp|=(HideData[j]&128)>>7;
Temp*=32;
BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=((HideData[j]&112)>>4)<<5; </P>
<P>BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=((HideData[j]&14)>>1)<<5; </P>
<P>BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=(HideData[j]&1)<<2;
j++;
Temp|=(HideData[j]&192)>>6;
Temp*=32;
BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=((HideData[j]&56)>>3)<<5; //第七个“3比特” BaseData=HideCalculate(BaseData,Temp);
i++;
Temp=(HideData[j]&7)<<5; //第八个“3比特” BaseData=HideCalculate(BaseData,Temp);
j++;
}
其中,图像融合计算是在unsigned char HideCalculate(unsigned char B, unsigned char H);函数中完成的。参数B为宿主信息的内容, H为隐藏信息的内容。计算完成后将融合后的信息返回,改函数的实现编码如下:
unsigned char CDataHiderView::HideCalculate(unsigned char B, unsigned char H)
{
// f2=round(f0*(1-t))+round(f1*t)
unsigned char R=(int)((1-t)*B+0.5f)+(int)(t*H+0.5f);
return R;
}
文件从位图中提取的过程实际是文件隐藏的逆过程。将含有隐含文件的位图和原始位图读入缓存后,先通过信息提取从宿主信息的每个字节恢复出3个比特,然后将这些比特流按次序以8bit/byte的格式组成字节流,从而完成对隐藏信息的恢复:
……
for(DWORD i=54;i<CarrierFileLen;i++)
{
Temp=(ShowCalculate(CarrierData,BaseData)&7)<<5;//提取出第一个“3比特”
i++; //宿主信息指针修正(字节为单位)
Temp|=(ShowCalculate(CarrierData,BaseData)&7)<<2; //提取出第二个“3比特”
i++;
Temp|=(ShowCalculate(CarrierData,BaseData)&6)>>1; //提取出第三个“3比特”
CarrierData[j]=Temp; //恢复出第一个隐藏字节
j++; //隐藏信息指针修正(字节为单位)
Temp=(ShowCalculate(CarrierData,BaseData)&1)<<7;
i++;
Temp|=(ShowCalculate(CarrierData,BaseData)&7)<<4; //提取出第四个“3比特”
i++;
Temp|=(ShowCalculate(CarrierData,BaseData)&7)<<1; //提取出第五个“3比特”
i++;
Temp|=(ShowCalculate(CarrierData,BaseData)&4)>>2; //提取出第六个“3比特”
CarrierData[j]=Temp; //恢复出第二个隐藏字节
j++;
Temp=(ShowCalculate(CarrierData,BaseData)&3)<<6;
i++;
Temp|=(ShowCalculate(CarrierData,BaseData)&7)<<3; //提取出第七个“3比特”
i++;
Temp|=ShowCalculate(CarrierData,BaseData)&7; //提取出第八个“3比特”
CarrierData[j]=Temp; //恢复出第三个隐藏字节
j++;
</P> |
|