文档章节

通过jpg图片隐藏文件

Kanonpy
 Kanonpy
发布于 03/27 12:31
字数 593
阅读 2
收藏 0

比如我们现在有一个视频Video.mkv,我们想隐藏它,那么我们可以找一张背景图片谣言.jpg, 把他们放在同一目录下:

Video.mkv打包成压缩包Video.rar,为什么要打包呢? 因为这是为后面解压服务得~

在该目录下编写bat文件:

copy  /b  谣言.jpg+Video.rar 谣言2.jpg

双击运行压缩.bat,我们可以看到目录下生成了一张谣言2.jpg的图片,看看大小,整合等于压缩包文件和图片文件总和~

最后,那如何还原原文件呢?? 很简单,直接将文件后缀改为rar压缩包文件进行解压就可以了,因为rar解压有个专属的开始位置,解压程序会读到开始位置的标识符才执行解压程序,应该前面的jpg二进制会被忽略。

当然如果你希望获得更强大的加密可以自己编写加密解密策略。

附上Python代码: github地址 加密

#coding:utf-8

import click
import random

@click.command()
@click.option('--background', prompt=True, help='输入用于隐藏的背景图片文件.')
@click.option('--encryptfile', prompt=True, help='输入需要加密的文件.')
def encryptfile(background, encryptfile):
    seed = random.randint(1024, 2048)
    seeds = []
    for i in range(seed):
        seeds.append(random.randint(1, 128))
    confusion = bytes(seeds)

    with open(background, 'rb') as fr_bg:
        bg_body = fr_bg.read()

    with open(encryptfile, 'rb') as fr_enc:
        enc_body = fr_enc.read()

    confusion_bytes_index = random.randint(1, len(enc_body)//2)

    objectfile = "encry_%d_%d_%d_"%(len(bg_body), len(confusion), confusion_bytes_index) + background
    data = bg_body + confusion + enc_body[confusion_bytes_index:] + confusion + enc_body[:confusion_bytes_index]

    print(len(bg_body)+len(confusion))
    print(len(enc_body[confusion_bytes_index:]))
    print(len(enc_body[:confusion_bytes_index]))
    print(len(bg_body)+2*len(confusion)+len(enc_body[confusion_bytes_index:]))
    print(len(data))

    with open(objectfile, "wb") as fw_obf:
        fw_obf.write(data)

if __name__ == "__main__":
    encryptfile()

解密:

#coding:utf-8

import click

@click.command()
@click.option('--inputfile', prompt=True, help='输入文件名及路径.')
@click.option('--outputfile', prompt=True, help='输出文件名及路径.')
def decryptFile(inputfile, outputfile):
    decryptfile = outputfile
    encryptfile = inputfile

    encrypt = encryptfile.split("_")
    bg_length, confuse_length, confusion_bytes_index = int(encrypt[1]), int(encrypt[2]), int(encrypt[3])
    headerindex = bg_length + confuse_length

    with open(decryptfile, "wb") as fw:
        with open(encryptfile, "rb") as fr:
            data = fr.read()
            frist_data_num = len(data)-(headerindex + confusion_bytes_index + confuse_length)
            frist_data = data[-confusion_bytes_index:]
            second_data = data[headerindex:headerindex+frist_data_num]
            print(headerindex + confusion_bytes_index + confuse_length)
            print(len(frist_data),len(second_data))
            fw.write(frist_data+second_data)

if __name__ == "__main__":
    decryptFile()

© 著作权归作者所有

Kanonpy
粉丝 16
博文 42
码字总数 45373
作品 0
广州
程序员
私信 提问
文件上传如何合理地验证文件类型?

在网上搜了一下,一般都是通过文件后缀名判断,很显而易见的是用户通过修改后缀名来逃避,我想问的问题有两个: 还有什么验证文件类型的方法? 攻击者利用后缀名漏洞能造成什么样的危害? 在...

Bluven
2014/08/28
192
0
Tensorflow Error笔记 4

愿天堂没有Tensorflow! 阿门。 Invalid Argument Error: Invalid JPEG data size 49 在我准备好训练数据,准备把数据放入网络训练时,在程序运行到这一行时,提示上述错误: 根据提示,很明...

BookThief
2017/07/17
0
0
shell上传绕过检测方法

shell上传条件: 1、上传点 2、绝对路径 3、要有权限 开始上传(先试着上传小马,然后在上传大马,因为有时大马更容易被吃掉) 1、直接上传shell,即php文件 (对文件类型不做限制) 2、更改...

董小洋
2017/10/10
0
0
如何保存Windows聚焦的锁屏壁纸

笔记本锁屏有时特别美,超想保存下来。可是笔记本锁屏是Windows聚焦,如图 这时,去哪里找锁屏图片呢? 第一步,找到图片位置。 首先,打开 C:Users ,找到你的登陆用户,显示隐藏的项目(勾...

Jinlong_Xu
03/07
0
0
为自己的APP添加启动页

打开APP的时候会有一个启动过程 ,为了较好的体验,一般加载一个启用页(大部分可能是广告······)。 最熟悉的打开微信时候一个地球图片,这篇文章简单介绍怎么加载该图片。 添加布局文...

梦想修补师
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部