目 录
1 绪论 1
1.1 研究背景 1
1.2 研究方法 1
1.3 研究内容 2
2 关键技术 3
2.1 报文摘要技术 3
2.1.1 单向散列函数 4
2.1.2 单向散列函数技术 4
2.2 数字图像技术 5
2.2.1 数字水印的概念 5
2.2.2 数字水印的要求 6
2.2.3 数字水印的原理及其通用模型 6
2.3 数字图像加密技术 8
2.3.1 数字图像加密的原理与通用模型 8
2.3.2 数字图像加密的典型算法 8
3 算法实现 11
3.1 采用的算法 11
3.2 算法流程图 12
3.3 报文摘要提取 12
3.4 数字图像水印 17
3.4.1 位图的位面 17
3.4.2 LSB算法模型 17
3.4.3 LSB算法的实现 18
3.5 混合加密 19
3.5.1 DES算法 19
3.5.2 RSA公开密钥密码体制 25
3.5.3 混合加密的实现 26
4 一种基于现代密码体制的图像加密算法 28
4.1现代密码体制 28
4.2 AES简介 29
4.2.1 AES的来源 29
4.2.2 AES算法描述 30
4.3 基于AES的数字图像置乱 31
4.4 实验结果与分析 32
4.4.1 图像的置乱效果 32
5 总结 33
参考文献 34
致谢 35
本课题旨在分析数字图像的结构和特点,对数字图像进行加密和解密,即:利用一定的算法对一副图像进行加密以达到不暴露原始图像的目的,然后进行解密以达到恢复原始图像的目的。同时,为了鉴别出图像是否被篡改,要求满足图像认证的要求。认证的目的是检测对图像数据的修改,以确定载体信息的完整性和真实性。可用易碎水印和报文摘要来实现图像认证。虽然只用报文摘要也能达到图像认证的目的,这种方法认证的精确度比较高,但是在传输过程中难免会受到噪声等的干扰,故使用报文摘要可能会达不到预期的目的,同时,因为数字水印也有图像认证的功能,因此,本系统采用报文摘要结合易碎水印来实现该目的。
3 算法实现
3.1 采用的算法
近年来,随着国际互联网络与多媒体技术的迅速发展,数字图像己经逐渐克服了往日因存储量巨大而带来的种种问题,成为信息表达方式的主流,数字图像信息的安全问题成为国际上研究的焦点问题。数字图像具有信息量大、信息表达直观的特点,它的安全保密显然与以往在计算机上所面对的文本数据截然不同。数字图像信息安全保密是结合数学、密码学、信息论、计算机视觉以及其它计算机应用技术的多学科交叉的研究课题。数字图像的加密技术是当代信息安全领域中比较活跃的一个研究方向。它结合了数学、密码学、信息论、计算机视觉以及其它计算机应用技术的多门学科。随着科技的发展,尤其是多媒体技术的发展,出现了更多的、新的图像加密算法,而按照不同的分类标准,图像加密算法还可以作其他不同的分类。
通过阅读一定量的资料了解到该课题目前在国内外的研究状况和相应的发展趋势。经过反复的思考,本课题打算按以下思路着手设计,以求最终能以程序实现该课题。
即:DES和RSA的混合加密算法,先随机产生一个DES密钥,用此密钥加密图像,得到扩展名为.bmp.mcs的文件1,然后采用RSA加密算法对随机产生的DES密钥进行加密将得到的密文加到文件1的文件头里面去。这样如果想得到原文件就必须先破解文件头,而文件头是由RSA加密的,安全性比较高,想破解并不是件容易的事,同时又由于DES加密速度快,适用于大文件的加密,且安全性不高,而RSA加密速度慢,适用于小文件的加密,但安全性很高,两者的结合即满足了速度的要求,又满足了安全性的要求。同时,为了满足图像鉴定的要求,特引进数字水印技术,即:采用一散列函数作用原图像,以提取一报文摘要,然后将此报文摘要作为水印信息嵌入到原始图像中,经加密解密后,再在解密后的图像中提取水印信息,然后判断此水印信息和原报文摘要是否相同,若相同,说明原始图像没有被篡改过,否则说明原始图像已被篡改。
3.2 算法流程图
图3-1 算法流程图
// EncryWithPicture.cpp : Defines the class behaviors for the application.
// www.srcfans.com
#include "stdafx.h"
#include "EncryWithPicture.h"
#include "EncryWithPictureDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
// CEncryWithPictureApp
BEGIN_MESSAGE_MAP(CEncryWithPictureApp, CWinApp)
//{{AFX_MSG_MAP(CEncryWithPictureApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/
// CEncryWithPictureApp construction
CEncryWithPictureApp::CEncryWithPictureApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/
// The one and only CEncryWithPictureApp object
CEncryWithPictureApp theApp;
/
// CEncryWithPictureApp initialization
BOOL CEncryWithPictureApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CEncryWithPictureDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}