100分求购BMP图片文件加密代码

tccsdn 2004-05-14 12:57:12
时间很紧,谁有现成的代码给我共享一下
...全文
111 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tccsdn 2004-05-14
  • 打赏
  • 举报
回复
谢谢各位的回答,现在有点事出去,等下回来就揭贴
weill 2004-05-14
  • 打赏
  • 举报
回复
此外,还有一个简单有效的办法,把存出的BMP文件的第一个,第二个字符(十六进制,应该是BM两个字符)用代码在写完后给它改了(或是写入前就给它改,这样更好),在读取时,在读入内存后再改回来。这样,嘻,你要是不告诉别人这是个BM图象的图片的话,只怕没人能猜出来。(谁能猜到你这个DAT文件是个改了格式的BMP啊,哈哈)。

当然,以上都是歪门斜道,不过,对付非高手,有这样的操作就可以了。
weill 2004-05-14
  • 打赏
  • 举报
回复
美你个头……别说我是菜鸟……
你倒是给个压缩程序代码来玩玩,要求不能太长哦……
不要求和winrar那样大而全,压缩比高,你就给我来点儿简单的吧……嘎嘎……
(说得好象吃面一样)。
weill 2004-05-14
  • 打赏
  • 举报
回复
压缩?晕倒……¥·#%·#¥%·¥#……
嘻,楼上的,你能不能给出一个文件压缩的代码啊……
lvjack 2004-05-14
  • 打赏
  • 举报
回复
同意 pp616
两全其美
weill 2004-05-14
  • 打赏
  • 举报
回复
对了,记得把Image1控件里放进图象哦,否则可能不会正常。
此外,解释一下。

我给你的代码完成的任务是
把Image1控件里已有的图象,用二进制读写的方法存入一个文件中。

其实,你如果要最最最简单的不让别人直接看出来,你把这二处:
FileSeek(……);
改成:
FileSeek(fhwnd,1024,0);
就完事。
这样,你存出来的图片因为不是从文件的第一个字节开始的,所以不合符标准,这样,别人就会发晕了。

当然,如果别人足够聪明,用十六进制软件打开生成的这个文件,然后猜出来了偏移量,那就没得说了,哈哈。
pp616 2004-05-14
  • 打赏
  • 举报
回复
压缩一下吧。又小有不能直接打开。
weill 2004-05-14
  • 打赏
  • 举报
回复
说明,上面代码中的加密具体方法没有写,但是代码写到这样,就差不多了,你要去做的只是把buffer[N]中的东西按一定的算法给它改变一下就可以了。解密当然就是反过来就完事。
weill 2004-05-14
  • 打赏
  • 举报
回复
倒了,我刚问过了一个类似的问题,你改造一下叭……
代码如下:
//说明:窗体上有两个Image、两个按钮、一个Edit(用于显示写了多少)。

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream *pms=new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(pms);
int N=pms->Size;
pms->Position=0;

char *buffer=new char[N+1] ;

pms->ReadBuffer(buffer,N*sizeof(char));

//对数据进行加密;
//.....
//开始写文件

int fhwnd;
String sfile="PICME.DAT";
if (!FileExists(sfile))
{
fhwnd=FileCreate(sfile);
FileClose(fhwnd);
}
fhwnd=FileOpen(sfile,fmOpenWrite);
FileSeek(fhwnd,0,2); //移动到文件尾;
Edit1->Text = (sizeof(char)*N);
FileWrite(fhwnd,buffer,sizeof(char)*N);
FileClose(fhwnd);

delete []buffer;

delete pms;



}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TMemoryStream *pms=new TMemoryStream();
String sfile="PICME.DAT";
char *buffer;

int fhwnd, iFileLength,N;
fhwnd=FileOpen(sfile,fmOpenRead);
iFileLength = FileSeek(fhwnd,0,2);
FileSeek(fhwnd,0,0);
N=(iFileLength+1)/sizeof(char);
buffer=new char[N+1];
FileRead(fhwnd,buffer,sizeof(char)*N);

//对数据进行解密;
//...

//
pms->Size=N;
pms->WriteBuffer(buffer,N*sizeof(char));
pms->Position=0;


Image2->Picture->Bitmap->LoadFromStream(pms);
FileClose(fhwnd);
delete []buffer;

delete pms;

}
//---------------------------------------------------------------------------
JetKingLau 2004-05-14
  • 打赏
  • 举报
回复
但这种做法别人仍能看到图片,如果要使得加密后别人不能够用 Bitmap->LoadFromFile(...) 来显示图片,则可以将图片保存到一个内存流(TMemoryStream),将该内存流的数据加密后再保存到文件。
JetKingLau 2004-05-14
  • 打赏
  • 举报
回复

偶通常是在 BMP 的某个固定区域,使用某个算法将自己的加密图(如:签名)整合在一起。
COKING 2004-05-14
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/listdoc.asp?mclsid=1&sclsid=109

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧