VC++信息安全编程(9)基于24位bmp位图的信息隐藏

本文介绍了信息隐藏的概念及其历史,强调了其与密码术的区别,并指出信息隐藏在确保数据安全方面的重要性。通过一个案例,演示了如何在VC++中利用24位BMP图像进行信息隐藏,实现信息的隐秘传输。
摘要由CSDN通过智能技术生成

信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是透明的。

传统的信息隐藏起源于古老的隐写术。如在古希腊战争中,为了安全地传送军事情报,奴隶主剃光奴隶 的头发,将情报文在奴隶的头皮上,待头发长起后再派出去传送消息。我国古代也早有以藏头诗、藏尾诗、漏格诗以及绘画等形式,将要表达的意思和“密语”隐藏在诗文或画卷中的特定位置,一般人只注意诗或画的表面意境,而不会去注意或破解隐藏其中的密语。   信息隐藏的发展历史可以一直追溯到"匿形术(Steganography)"的使用。"匿形术"一词来源于古希腊文中"隐藏的"和"图形"两个词语的组合。虽然"匿形术"与"密码术(Cryptography)"都是致力于信息的保密技术,但是,两者的设计思想却完全不同。"密码术"主要通过设计加密技术,使保密信息不可读,但是对于非授权者来讲,虽然他无法获知保密信息的具体内容,却能意识到保密信息的存在。而"匿形术"则致力于通过设计精妙的方法,使得非授权者根本无从得知保密信息的存在与否。相对于现代密码学来讲,信息隐藏的最大优势在于它并不限制对主信号的存取和访问,而是致力于签字信号的安全保密性。

 

 

我们进行信息交换的时候,需要保证数据的安全,所以需要进行适当的信息隐藏。

我们发送一个图片。但是图片里面隐含的加密信息,是就是信息隐藏,只有专属工具能够读出。

所以信息隐藏技术很重要。针对信息安全。

我们来实现一个案例代码。

BMP图信息隐藏头文件,请见代码分析

// BMPHider.h: interface for the CBMPHider class.
//
//

#if !defined(AFX_BMPHIDER_H__6287D87F_F0AA_4D0C_9502_4674B639CBB5__INCLUDED_)
#define AFX_BMPHIDER_H__6287D87F_F0AA_4D0C_9502_4674B639CBB5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <complex>
using namespace std;
class CBMPHider  
{
public:
	CBMPHider();
	virtual ~CBMPHider();
public:
	int m_BitCount;			//位图的图像位数
	WORD * m_pWordData;
	CPalette m_Palette;
	unsigned char *m_pDib, *m_pDibBits;
	unsigned char *m_pOldDibShow;
	DWORD m_dwDibSize;
	BITMAPINFOHEADER *m_pBIH;
	RGBQUAD *m_pPalette;
	int m_nPaletteEntries;
	UINT bitmap_size;
	UINT embfile_size;
	unsigned char *p;		//指向宿主图像数据
	int tag;				//此tag用以标记打开的图像中是否含有隐藏信息0:无 else:有
	unsigned char *q;		//指向隐藏文件数据
	unsigned char *m_pFile;
public:
	BOOL Draw( CDC *pDC, int nX = -1, int nY = -1, int nWidth = -1, int nHeight = -1, int Style = 1);
	BOOL Save( const char *pszFilename );
	BOOL Load( const char * );
	
	void BackUpDib();		//备份图像
	void Pick();			//提取图像
	void Embed();			//嵌入图像
	BOOL LoadEmbFile(const char *);
	BOOL DrawContrast(CDC *pDC,int rect_width, int rect_height);
	void SavePicked( const char *pszFilename );	

};

#endif // !defined(AFX_BMPHIDER_H__6287D87F_F0AA_4D0C_9502_4674B639CBB5__INCLUDED_)


请见详细代码实现

 

#include "stdafx.h"
#include "BMPHider.h"

//
// Construction/Destruction
//

CBMPHider::CBMPHider()
{
	m_pDib = NULL;
	m_pWordData = NULL;
	m_pFile = NULL;
	m_pOldDibShow = NULL;
}

CBMPHider::~CBMPHider()
{
	if( m_pDib != NULL )
		delete [] m_pDib;
	if( m_pWordData != NULL )
		delete [] m_pWordData;
	if (m_pFile != NULL)
		delete [] m_pFile;
	if (m_pOldDibShow != NULL)
		delete [] m_pOldDibShow;
}

BOOL CBMPHider::Load( const char *pszFilename )
{
	CFile cf;
	if( !cf.Open( pszFilename, CFile::modeRead ) )
		return( FALSE );
	
	DWORD dwDibSize;
	dwDibSize =
		cf.GetLength() - sizeof( BITMAPFILEHEADER );

	unsigned char *pDib;
	pDib = new unsigned char [dwDibSize];
	if( pDib == NULL )
		return( FALSE );

	BITMAPFILEHEADER BFH;
	try
	{
		if( cf.Read( &BFH, sizeof( BITMAPFILEHEADER ) )
			!= sizeof( BITMAPFILEHEADER ) ||
			BFH.bfType != 'MB' ||
			cf.Read( pDib, dwDibSize ) != dwDibSize )
		{
			delete [] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值