图片文件合成器

1 篇文章 0 订阅

图片文件合成器

背景

     初学C语言,突然接触到这个功能,发现这个功能有很多用途。所以,写个博客记录一下。

原理

     图片、文件合成的原理其实就是将文件的二进制代码加载到图片的二进制代码后面,合成一个二进制文件;
     windows加载器在进行加载时只结合文件的后缀名,检索文件的标志头和结束标志的位置读取。也就是因为如此,我们有了可改造的空间。

为了更加清楚的了解其原理,根据自己的理解,绘制如下原理图。
在这里插入图片描述
为了进一步了解其原理,将三个文件的二进制文件打开,根据其首末对比深入了解。(1:JPG文件的原码、2:ZIP文件的原码、3:合成文件的原码)
在这里插入图片描述
在这里插入图片描述

方法

关于图片文件合成器,本文阐述了两种方法。
<1> 根据cmd中的copy命令将图片、文件进行合成。
<2> 利用C语言写了一段代码进行图片、文件的合成。

方法一

<1> 假设创建一个JPG文件和一个ZIP文件(该文件是一个DOCX文件经过压缩得到)
在这里插入图片描述

<2> win+R→cmd→copy /?命令
在这里插入图片描述
由上述原理可知 copy 命令下的 /B 命令即可将两个文件的二进制文件放到一个文件中去。
<3> copy /b 1.jpg+2.zip 3.zip
在这里插入图片描述即可完成图片、文件的合成。
生成的文件名假设为3.jpg。
<4> 3.jpg
在这里插入图片描述
<5> 将3.jpg文件的后缀名改为.zip(即改为压缩文件)
在这里插入图片描述
解压后,你会发现原来的DOCX文件。

方法二

<1> 将需要进行合成的文件跟程序代码放在相同的路径下。
在这里插入图片描述

<2> C语言代码实现跟方法一原理相同,所以直接上代码。

#include<stdio.h>
#include<stdlib.h>

void main()
{
    //声明变量
	FILE *f_pic,*f_file,*f_compound;
	char pic_name[20],file_name[20],compound_name[20];
	char ch;
/
	printf("<<Pictuer--File>>\n");
	printf("Enter the name of pic:   ");
	scanf("%s",&pic_name);
	printf("Enter the name of file:  ");
	scanf("%s",&file_name);
	printf("Enter the name of compound:");
	scanf("%s",&compound_name);
/
	// <rb> 读写二进制文件 
	if(f_pic = fopen(pic_name,"rb"))
		;
	else
	{
		printf("Can not open %s !!!!!!!\n",pic_name);
		exit(0);
	}

	if(f_file = fopen(file_name,"rb"))
		;
	else
	{
		printf("Can not open %s !!!!!!!\n",file_name);
		exit(0);
	}

	if(f_compound = fopen(compound_name,"wb"))
		;
	else
	{
		printf("Can not open %s !!!!!!!\n",compound_name);
		exit(0);
	}
/
	//feof()函数判断二进制文件是否结束
	while(!feof(f_pic))
	{
		ch = fgetc(f_pic);
		fputc(ch,f_compound);
	}
	fclose(f_pic);

	while(!feof(f_file))
	{
		ch = fgetc(f_file);
		fputc(ch,f_compound);
	}
	fclose(f_file);
	fclose(f_compound);

	system("pause");
}

<2> 运行结果
在这里插入图片描述
在这里插入图片描述

结束语

      看一下文件大小,你会发现合成文件等同于JPG文件+ZIP文件。
      这个功能可以用来隐藏一些重要文件,还可以做一些加密文件......
      哈哈哈,第一次写博客,初学者记录一下。
      (初学者,语言有些简单,如有错误,希望提出批评哦! )
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值