数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2378|回复: 0

集训高手

[复制链接]
发表于 2004-5-3 18:58:42 | 显示全部楼层 |阅读模式
< align=center>下面这段程序是什么编的并给出完整模式</P>

<>for(DWORD i=54;i&lt;BaseFileLen;i++) {

Temp=((HideData[j]&amp;224)&gt;&gt;5)&lt;&lt;5; </P>
<>BaseData=HideCalculate(BaseData,Temp);  </P>
<P>i++;   

Temp=((HideData[j]&amp;28)&gt;&gt;2)&lt;&lt;5;  </P>
<P>BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=(HideData[j]&amp;3)&lt;&lt;1;   

j++;  </P>
<P>Temp|=(HideData[j]&amp;128)&gt;&gt;7;

Temp*=32;

BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=((HideData[j]&amp;112)&gt;&gt;4)&lt;&lt;5;  </P>
<P>BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=((HideData[j]&amp;14)&gt;&gt;1)&lt;&lt;5;  </P>
<P>BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=(HideData[j]&amp;1)&lt;&lt;2;

j++;

Temp|=(HideData[j]&amp;192)&gt;&gt;6;

Temp*=32;

BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=((HideData[j]&amp;56)&gt;&gt;3)&lt;&lt;5; //第七个“3比特” BaseData=HideCalculate(BaseData,Temp);

i++;

Temp=(HideData[j]&amp;7)&lt;&lt;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&lt;CarrierFileLen;i++)

{

Temp=(ShowCalculate(CarrierData,BaseData)&amp;7)&lt;&lt;5;//提取出第一个“3比特”

i++; //宿主信息指针修正(字节为单位)

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;7)&lt;&lt;2; //提取出第二个“3比特”

i++;

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;6)&gt;&gt;1; //提取出第三个“3比特”

CarrierData[j]=Temp; //恢复出第一个隐藏字节

j++; //隐藏信息指针修正(字节为单位)

Temp=(ShowCalculate(CarrierData,BaseData)&amp;1)&lt;&lt;7;

i++;

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;7)&lt;&lt;4; //提取出第四个“3比特”

i++;

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;7)&lt;&lt;1; //提取出第五个“3比特”

i++;

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;4)&gt;&gt;2; //提取出第六个“3比特”

CarrierData[j]=Temp; //恢复出第二个隐藏字节

j++;

Temp=(ShowCalculate(CarrierData,BaseData)&amp;3)&lt;&lt;6;

i++;

Temp|=(ShowCalculate(CarrierData,BaseData)&amp;7)&lt;&lt;3; //提取出第七个“3比特”

i++;

Temp|=ShowCalculate(CarrierData,BaseData)&amp;7; //提取出第八个“3比特”

CarrierData[j]=Temp; //恢复出第三个隐藏字节

j++;

</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 06:38 , Processed in 0.053106 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表