图片隐写术,是一种将信息藏在图片中的技术。这个技术的前景非常广阔,在网络安全、神经网络对抗攻击等都有一定应用。

2020年7月10日,我开发出图片隐写工具——TPEncoder v1.0.2,可以将海量信息藏匿在图片中。写完还迫不及待地跟别人试了试。

今天山东还在高考,所以标题没啥毛病。(狗头)

据计算,大小为

的肉眼意义上的纯色图片,可以储存一篇三万七千余字的论文。

比如下图:

由于知乎无法上传bmp格式,因此损失了一些精度,直接解码会出现乱码

这张图藏着dio的著名台词:

ジョジョ、人間ってのは能力に限界があるな。俺が短い人生で学んだことは、人間は策を弄 すれば弄するほど、予期せぬ事態で策が崩れ去るってことだ。人間を超えるものにならねばな。俺は、人間をやめるぞ、ジョジョ!

俺は、人間をやめるぞ、ジョジョ

工程源代码与可执行程序:

Text-Picture Encoder​github.com


理论基础

首先,无论是中文、日文、英文还是什么其他语言的字符,在计算机中都有对应的二进制编码方式,如unicode:

unicode编码下的“ジョジョ”为八个字节

而位图中每一个像素也是二进制的,根据RGB的值存储的——第一个字节是B的值,范围为

;第二个字节是G的值,范围为
;第三个字节是R的值,范围为
。忘记的朋友可以戳这个链接一下:

刘冬煜:七、位图的读入方法​zhuanlan.zhihu.com

如果我们将每一个字符的值直接输出到位图的RGB中,最简单的文本转图片编码器就完成了。不过根据像素的值很容易推断出其内容,比如下图中,用工具直接加密源代码:

工具中-d和-s选项都使用0x000000时,任务退化为将每一个字符的值直接作为RGB输出到图片文件中

细心的朋友可以看出,由于一个像素是三个字节,即三个字符的编码值共同决定的,因此最接近灰色的位置可能是由小写字母字符('a'-'z',ASCII取值范围

)、大括号('{' '}',ASCII分别为123和125)、位或符号('|',ASCII为124)、点引号('`',ASCII为126)中任意三个构成的三元组;而明亮的部分则可能是中文注释、日文假名等,可以比较直观地看出这是代码文件。

再比如这篇我的这篇关于摇滚音乐文化的论文:

图片里中英文的分界非常明确——明亮为中文,灰暗为英文

因此我们希望在这个最简单的编码器中有所加强,使得输出的图片尽可能地接近纯色;或者换句话说,相邻两个像素之间颜色的变化不能太过明显。

有三个维度扰动限制的文本图片编码器

没有扰动限制时,每个像素的取值范围为

,若把每个像素看作一个三维向量的话,两个像素向量差的模长决定了二者在视觉上的差距:
颜色空间中的几个点及其坐标

因此,如果将每个像素RGB值的可变范围从

变为
,即每个像素实际存储的比特数从24下降到15:
加扰动限制前后实际有效比特的区别

虽然需要更大的图片来存储,但有两点更加显著的变化:

  1. 每个字符占8或16个比特,若每个像素储存的比特数为24,有一个很大的公约数8,这样的话像素和像素之间的关联性就会变得很大,比如全篇文章如果都是汉字,那么,整个图片都会显得很亮。但如果每个像素只储存15个比特有效字符,那么公约数只剩下了1,像素间的关联性被降到了最低。
  2. 每个像素的变化变得更小,甚至人眼难以观察,进一步降低了隐写被察觉的风险。
像素间的关联性被降低
加扰动控制的论文编码,生成的图片并没有明显的特征

如果仅仅是全黑的图片就没意思了,我们还可以修改默认像素颜色。

默认像素颜色的加入

这一步就非常容易了,只需要用户自定义基础值,而不是简单的RGB全0即可。不过需要检查基础值与扰动最大限度的和不能超过255:

通过编码器,实现jojo著名台词的图片隐写

工具的展望

除纯色图片隐写之外,编码器工具还可以实现彩色位图的隐写——即默认RGB值并非固定,而是根据额外输入图片里每个位置的RGB值而变化。这样生成的fake image,隐写更难被发现。

图片隐写的起点也未必是左上角像素,可以是任意指定的位置(只要没有超过图片大小),其余像素也可以是随机噪声,以混淆视听。

这些功能,工具暂时还没有实现,不过也比较容易去完成。敬请期待!

图片指定区域根据rgb值计算出对应的坐标地址_【水文】震惊!高考期间,这位学生居然能通过图片隐写实现文字通信!...相关推荐

  1. python识别图片指定位置文字_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  2. python 制定识别图片的某些区域_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  3. python查找图片区域_python批量识别图片指定区域文字内容

    python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  4. html背景图片只显示一张图片,img只显示图片一部分 或 css设置背景图片只显示图片指定区域(示例代码)...

    17:14 2016/3/22 img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片 ...

  5. html如何把图片在背景图一半,img只显示图片一部分 或 css设置背景图片只显示图片指定区域...

    17:14 2016/3/22 img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片 ...

  6. css 设置背景图一半_img只显示图片一部分 或 css设置背景图片只显示图片指定区域...

    17:14 2016/3/22 img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片 ...

  7. python中paste函数的作用,python图片指定区域替换img.paste函数的使用

    今天用到了img.paste函数,就写篇笔记记录一下,方便回顾. 做人脸检测,产生负样本的时候想把图片中人连部分用背景的某一部分替换掉,然后再随机裁剪产生负样本,这样比随机裁剪的时候避开人脸区域应该实 ...

  8. adxl345取出值怎么算角度_怎么通过adxl345输出值计算出倾角?

    怎么通过adxl345输出值计算出倾角? 传感器常见问题 / 2012-12-23 此方法是通过勾股定理计算的,请参考以下程序: // 加速的X轴用来算俯仰角;Y轴算横滚角 u16 Gx; u16 G ...

  9. iOS 截图 对view指定区域 以及 对图片 指定区域截图

    //MARK:获取截图,对view 制定区域截图static func getCropImage(_ view:UIView,size:CGSize) -> UIImage {//false是透 ...

最新文章

  1. 英伟达颠覆CPU!Arm架构专为AI而生,性能超x86十倍
  2. linux和aix设置时间
  3. 用一条sql取得第10到第20条的记录-Mssql数据库
  4. 【阿里云课程】分组网络原理,结构发展及设计改进
  5. git submoule 更新_微软Surface Duo双屏手机键盘更新:支持分体式输入
  6. 牛客题霸 NC26 括号生成
  7. 【转】log4net使用详解
  8. open ssl里面的自定义get***函数失效
  9. [css] 为什么说css的选择器一般不要超过三级?
  10. IOS开发学习笔记024-UIButton和UIImageView的区别
  11. hat怎么安装mysql_Red Hat Enterprise Linux中怎么安装Mysql+apache+php+zend
  12. [总结]用U盘安装Ubuntu 16.04
  13. 【KMP】KMP 字符串匹配算法
  14. 锐捷云终端计算机,锐捷RG-RCM1000-Office智能云终端控制器
  15. 快手火山美拍秒拍抖音映客yy小影视频批量下载毛驴保存去水印助手
  16. 个人配置--常用软件保护色设置
  17. springboot 集成 grpc 和 protobuf(二) | 在实际项目中使用 grpc 和 protobuf
  18. 高并发系统负载均衡与实时监控的实用方案
  19. 统计字符个数怎么用c语言写,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  20. python快速找到列表中出现最多的元素

热门文章

  1. 基于图像分析的铁路车号识别系统
  2. Oracle PL/SQL入门之慨述
  3. 理解AngularJS中的依赖注入
  4. 省市地区表 mysql数据库
  5. 优秀交互设计的 UI 原则
  6. Java开源——常见J2EE框架简介
  7. 15 redis-分布式锁
  8. 查询x,y之间的素数
  9. C# 接口的作用浅谈举例(转)
  10. 设计模式:迭代器模式