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

f74edcbb242a22caa7a1fceff6ed6818.png

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

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

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

据计算,大小为

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

比如下图:

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

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

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

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

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

Text-Picture Encoder​github.com

理论基础

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

2fc844270216aea53677121dd2180f80.png
unicode编码下的“ジョジョ”为八个字节

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

;第二个字节是G的值,范围为
;第三个字节是R的值,范围为
。忘记的朋友可以戳这个链接一下:
刘冬煜:七、位图的读入方法​zhuanlan.zhihu.com
8bc001e2acc55096c75d2b78d5ff6414.png

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

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

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

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

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

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

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

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

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

,若把每个像素看作一个三维向量的话,两个像素向量差的模长决定了二者在视觉上的差距:

918fc419464439b2f9723848e95ccead.png
颜色空间中的几个点及其坐标

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

变为
,即每个像素实际存储的比特数从24下降到15:

ed6be3a8237e180c3f5be852eaee42a0.png
加扰动限制前后实际有效比特的区别

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

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

af71a24c2e92f3037dfa48c861e4d10c.png
像素间的关联性被降低

94861be68eed5a8028f9714867dc0c07.png
加扰动控制的论文编码,生成的图片并没有明显的特征

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

默认像素颜色的加入

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

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

工具的展望

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值