画像ファイル合成装置
バックグラウンド
初学C语言,突然接触到这个功能,发现这个功能有很多用途。所以,写个博客记录一下。
原理
图片、文件合成的原理其实就是将文件的二进制代码加载到图片的二进制代码后面,合成一个二进制文件;
windows加载器在进行加载时只结合文件的后缀名,检索文件的标志头和结束标志的位置读取。也就是因为如此,我们有了可改造的空间。
その原理をより明確に理解するために、自分の理解に従って次の模式図を描いてください。
その原理をさらに理解するには、3 つのファイルのバイナリ ファイルを開いて、最初と最後の比較に基づいて深く理解してください。(1:JPGファイルの元コード、2:ZIPファイルの元コード、3:複合ファイルの元コード)
方法
画像ファイル合成装置に関して、この記事では 2 つの方法を説明します。
<1> cmdのcopyコマンドに従って画像とファイルを合成します。
<2> C言語を使って画像やファイルを合成するコードを書きます。
方法 1
<1> JPG ファイルと ZIP ファイル(ファイルは圧縮された DOCX ファイルです)を作成するとします。
<2> win+R→cmd→コピー/? コマンド
上記の原理から、copy コマンドの下の /B コマンドは 2 つのファイルのバイナリ ファイルを 1 つのファイルにまとめることができることがわかります。
<3> copy /b 1.jpg+2.zip 3.zipで
写真とファイルの合成が完了します。
結果のファイル名は 3.jpg であると想定されます。
<4> 3.jpg
<5> 3.jpg ファイルの拡張子を .zip に変更します (つまり、圧縮ファイルに変更します)
解凍すると、元の DOCX ファイルが表示されます。
方法 2
<1> 合成が必要なファイルとプログラムコードを同じパスに配置します。
<2> C 言語コードの実装原理は方法 1 と同じなので、コードを直接アップロードします。
#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文件。
这个功能可以用来隐藏一些重要文件,还可以做一些加密文件......
哈哈哈,第一次写博客,初学者记录一下。
(初学者,语言有些简单,如有错误,希望提出批评哦! )