- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息安全实验报告五
实验成绩
《信息安全概论》实验报告
实验五 数字水印实验
专业班级 计科F1301 学号 201316010508 姓名 司如言 完成时间_2016/5/24
实验目的
理解数字水印的实现原理;通过演示程序加深对数字水印的理解,并完成水印嵌入和检测的代码编写。
实验内容
用演示软件实现在一幅图像中嵌入水印信息,对比嵌入水印前后的图像有无明显变化;用演示软件实现对一幅给定图像进行是否嵌入水印的检测;编写数字水印程序,分别实现水印的嵌入与检测。
实验环境和开发工具
Windows 7 操作系统
AssureMark v2.0版
VC++ 6.0
实验步骤和结果
数字水印程序演示
用AssureMark软件实现嵌入水印信息,并对水印信息进行检测。
2、数字水印程序编写
参考给定DLL中关于水印嵌入、提取函数的说明,编写代码分别实现水印的嵌入与检测。
(1)调用DLL中的_ADDWATERMARK函数,实现水印嵌入。
(2)调用DLL中的_GETWATERMARK函数,实现水印检测。
3、数字水印演示步骤
Step 1:在AssureMark程序主界面的“模式选择”域中选择“嵌入水印”,然后单击“打开”按钮,选择要嵌入水印信息的原始图像;单击“保存”按钮。具体操作如下图示:
图3.1嵌入水印信息设置
Step 2:关闭显示“水印信息嵌入成功”的提示窗口,嵌入水印信息前后的图像对比如图3.2所示,可以看出两者在视觉上并无明显差异。
图3.2 嵌入水印信息前后的图像对比
Step 3:在程序主界面的“模式选择”域中选择“检测水印”,然后单击“打开”按钮,选择要检测是否嵌入水印信息的原始图像。“提取的水印信息”栏中显示提取到的水印信息“信息安全 ISCC”,如下图所示:
水印信息提取成功
4、将源代码调试,发现错误,再修改完善。void CPrj_watermarkDlg::OnBtnImbed()
{
//打开并读取未嵌入水印的源BMP文件
CFile dibFile(m_strFileImgSrc, CFile::modeRead);
DWORD nJPG_Len = 0;
nJPG_Len = (DWORD)dibFile.GetLength();
dibFile.Read(pJPG_Buf, nJPG_Len);
//调用DLL中的_ADDWATERMARK函数,实现水印嵌入
int ret1;
memset(WmCoef, 0, sizeof(WmCoef));
ret1 = _ADDWATERMARK(pJPG_Buf, nJPG_Len, pBMP_Buf, WmCoef);
if(ret1 == 1) //水印嵌入成功,分别用文件保存嵌入水印后的图片和源DCT系数,以备水印检测使用
{
AfxMessageBox(水印嵌入成功);
CFile dibFile2(m_strFileImgWater, CFile::modeCreate|CFile::modeWrite);
dibFile2.Write(pBMP_Buf, nJPG_Len);
dibFile2.Close();
CFile fCoef(CoefDCT.dat, CFile::modeCreate|CFile::modeWrite);
fCoef.Write(WmCoef, strlen((char*)WmCoef));
fCoef.Close();
}
else if(ret1 == 0)
{
AfxMessageBox(水印嵌入失败);
}
dibFile.Close();
}
从图像中提取水印的函数核心实现
// WaterMarkDlg.cpp : implementation file
#include stdafx.h
#include WaterMark.h
#include WaterMarkDlg.h
#include Dib.h
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
……
BOOL CWaterMarkDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX 0xF000);
CMenu* pSysMenu = GetSystemMen
文档评论(0)