covOptional,
covOptional,
covOptional,
covTrue,
covOptional
covOptional
covOptional
)
);
图3.2 打开word文档
(5)获得UNICODE编码并进行md5加密。
MultiByteToWideChar(CP_ACP,0,wordtem,-1,wordstr,255); sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
j=wordstr[0];
wordmd5=_ecvt(j,5,&decimal,&sign);
md5T.MD5Update ((unsigned char*)_ecvt(j,5,&decimal,&sign), wordmd5.GetLength());
md5T.MD5Final (digest);
high = digest[1] /16;
low = digest[1] %16;
for (k=0;k<16; k++)
{
j=k*2;
high = digest[k] /16;
low = digest[k] %16;
if (high >=10)
{
num[j]= (unsigned char)(high-10+'A');
}
else
{
num[j]= (unsigned char)(high+'0');
}
if (low >=10)
{
num[j+1]= (unsigned char)(low-10+'A');
}
else
{
num[j+1]= (unsigned char)(low+'0');
}
}
(6) 生成水印并嵌入文档。
switch (num[tempm])
{ case '0': wf[i].line=55;break;
case '1': wf[i].line=1;break;
case '2': wf[i].line=3;break;
case '3': wf[i].line=4;break;
case '4': wf[i].line=6;break;
case '5': wf[i].line=7;break;
case '6': wf[i].line=9;break;
case '7': wf[i].line=10;break;
case '8': wf[i].line=11;break;
case '9': wf[i].line=20;break;
case 'A': wf[i].line=23;break;
case 'B': wf[i].line=25;break;
case 'C': wf[i].line=26;break;
case 'D': wf[i].line=27;break;
case 'E': wf[i].line=39;break;
case 'F': wf[i].line=43;break;
}
if ((num[tempm+1]>'8') && (num[tempm+2]>'8') && (num[tempm+3]>'8'))
{wf[i].color=RGB(255,255,255);}
if ((num[tempm+1]>'8') && (num[tempm+2]>'8') && (num[tempm+3]<='8'))
{wf[i].color=RGB(255,255,254);}
if ((num[tempm+1]>'8') && (num[tempm+2]<='8') && (num[tempm+3]>'8')) 基于WORD文档的防篡改水印系统设计与实现(9):http://www.751com.cn/jisuanji/lunwen_1627.html