图种是啥?
图种一种采用特殊方式将图片文件(如jpg格式)与压缩文件结合起来的文件。该文件一般输出为jpg图片文件,可以正常预览图片;当有人将该图片下载到本地后,可以通过修改文件的后缀,将.jpg改为.zip,并用winrar/7zip查看得到数据。由于这种方式有利于某些网友(老司机)传播种子文件,故称为图种,又叫作内涵图(摘自百度百科)。
图种的生成方式有很多,但其原理永远都是那一个,就是接头霸王
以下为萌娘百科解释: 大部分图片格式都是元数据格式文件,数据是按照特定格式的字节流(即:区块)来分区保存,图片解释程序只会处理符合格式的区块字节流读取和处理图像数据,不符合的会被视为损坏的区块处理。 Rar压缩文件以rar特有的魔术字节流(ASCII码为Rar!)作为其文件格式的读取开头,这个魔术字并不需要一定在文件字节流的起始。
打个比方,一张图片通常是以字节流的形式来保存的,而压缩软件通常会忽略掉字节流,直接定位到压缩文件的文件头部分,这就导致了这样的现象:扩展名改成图片格式就变成了图片,改成压缩文件就便乘小姐姐
搞清楚原理之后,我们就可以开始愉快的写代码环节了
虽然没啥技术含量,但的确能用(滑稽)? 已知bug: 文件不能大于1.5G(雾)
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
/*
以下是没有卵用的密码验证函数
void passwd_check()
{
int passwd=0;
while(passwd!=10010)
{
printf("请输入密码:");
scanf("%d",&passwd);
if(passwd!=10010)
printf("密码错误,请重新输入\n");
}
}
*/
int main()
{
//passwd_check();
FILE *f_pic,*f_zip;
char pic[200],zip[200],*buf;
int zip_file_end,flag_fread,flag_fwrite;
system("color 0d");system("title Powered by 小米智能");
printf("图片文件(直接拖入就可以,不带引号,不带空格:");
scanf("%s",pic);
if(!(f_pic=fopen(pic,"ab")))
{
printf("打开图片文件失败!");
Sleep(3000);
exit(-1);
}
fflush(stdin);
printf("压缩文件:");
scanf("%s",zip);
if(!(f_zip=fopen(zip,"rb")))
{
printf("打开压缩文件失败!");
Sleep(3000);
exit(-2);
}
fflush(stdin);
fseek(f_zip,0,SEEK_END); //文件指针移向文件尾
zip_file_end=ftell(f_zip); //获取文件大小
fseek(f_zip,0,SEEK_SET); //返回文件起始处
buf=(char*)malloc(zip_file_end);
flag_fread=fread(buf,1,zip_file_end,f_zip); //读取文件到内存(bug出处)
flag_fwrite=fwrite(buf,1,zip_file_end,f_pic); //连接图片与压缩包
if(flag_fread==flag_fwrite&&flag_fwrite==zip_file_end&&flag_fread==zip_file_end)
printf("成功啦~\n");
else
printf("文件太大或其他错误,处理失败\n");
fclose(f_zip);
fclose(f_pic);
free(buf);
system("pause");
}
下面是效果展示:
以后会更新图种分离代码(有生之年)看我啥时候想起来吧(即答)?