爱意满满的作品展示区。
Aaron99

[把文字写进像素里] 基于像素微调实现的文字隐写术

  •  1
     
  •   Aaron99 · Jan 27, 2017 · 10077 views
    This topic created in 3568 days ago, the information mentioned may be changed or developed.

    引言

    先看下面这张图像:

    870308089_result.png

    这张看似“纯黑色”的图像中其实隐藏了一份完整版的 GPL V3 协议的中文译文,而且文字信息就隐藏在像素之间。想要获得这幅图像的密文信息,我们只需要打开( https://hide.aoaoao.me),选择这张图像,即可解密出完整内容:

    70127131046717.jpg

    如果想要生成这种带有密文的图像,只需要选择已有的图像,填写密文,即可生成。这样的隐写术不是直接讲内容写入文件数据,而是通过微调像素的色值来达到存放数据的目的,由于只是微调,因此正常人很难察觉其中的变化。

    原理

    1. 将待处理文本转换为二进制格式,并补足 16 位连接起来
    2. 遍历图像的每个像素的每个色彩通道值,与之前的二进制数据相对应,如果为 1 ,则微调当前色彩值至最近的偶数,反之为奇数
    3. 在图像开始和文本写入结束时分别加入特殊标记以便后期读取识别

    理论上一张图像可以存放的字数(中英文都算为1个字)=(图像长像素数X图像宽像素数-34)/16。比如:一张500像素X500像素的图像可以存放约15万字。

    我用一些图像测试了一下,大家可以对比对比:

    原图:

    qww.jpg

    下图为写入《独立宣言》中文译文后的图像:

    963573080_result.png

    源代码

    GitHub:https://github.com/HFO4/HideByPixel

    Demo:https://hide.aoaoao.me/

    (代码匆忙写成,有许多 Bug ,时不时会抽风,请多多包涵)

    Supplement 1  ·  Jan 27, 2017
    刚刚服务器被 D ,所以演示站暂时无法访问
    Supplement 2  ·  Jan 28, 2017
    感谢大家支持,看到大家的回复,发现这个技术的确很早前就有了,但此帖是我受同学启发,并独立思考出来的结果,就当是做了个在线版的方便大家使用吧!
    64 replies  •  2018-04-15 15:52:08 +08:00
    kid740246048
    kid740246048
    Jan 27, 2017 via Android
    1
    以后开车更方便更隐蔽了(大雾
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    2
    @kid740246048 为什么你们第一反应全是开车用。。←_←
    bdbai
    bdbai
    Jan 27, 2017 via Android
    3
    压缩一下图片就没用了吧,一定要原图才可以
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    4
    @bdbai 是这样 但是有些压缩技术是无损压缩的,可以大大减小图像体积
    starvedcat
    starvedcat
    Jan 27, 2017
    5
    某知名企业内网论坛的背景是不是就用了类似的技术。。?这样就可以查出是哪个账号截的图
    jinfeng333
    jinfeng333
    Jan 27, 2017
    6
    不错 感谢分享
    xenme
    xenme
    Jan 27, 2017 via iPhone❤️2
    7
    应该具有鲁棒性,抗污损、裁剪。
    然后世界上的所有图片里面全部是种子,以后拿手机拍张照就能开车是多么壮观
    Yishanshan
    Yishanshan
    Jan 27, 2017 via Android
    8
    真正意义上的图种
    loading
    loading
    Jan 27, 2017 via Android
    9
    比 copy 大法高明不少。
    a87150
    a87150
    Jan 27, 2017
    10
    随便选了几张 jpg 图片读取发现会出现 badii 这个词。
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    11
    @a87150 手抖,已修复
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    12
    ripe
    ripe
    Jan 27, 2017 via Android
    13
    把账号密码什么的写进图片然后做桌面壁纸..
    distant1219
    distant1219
    Jan 27, 2017
    14
    厉害了我的哥
    RqPS6rhmP3Nyn3Tm
    RqPS6rhmP3Nyn3Tm
    Jan 27, 2017 via iPhone
    15
    压缩是大头啊,在互联网上传播的图片少有不压缩的
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    16
    @BXIA 的确是这样
    netpart1
    netpart1
    Jan 27, 2017 via iPhone
    17
    有什么意义,对比度,亮度,随便处理一下,就没了,只有作为暗号有意义,
    Quaintjade
    Quaintjade
    Jan 27, 2017
    18
    是不是可以理解成 RGBA 32-bit 中每个通道拿出 1 个 bit 来存放信息?那样的话理论上能放 4 倍信息量。
    如果不用校验的话,我觉得没必要每个通道都拿出一个 bit 。从 alpha 通道或 blue 通道拿一个就行了。
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    19
    @Quaintjade 嗯 的确是这样 可以降低图像品质损耗
    XiaoXiaoNiWa
    XiaoXiaoNiWa
    Jan 27, 2017 via Android
    20
    CTF 中用的隐写?
    netpart1
    netpart1
    Jan 27, 2017 via iPhone
    21
    这个东西修改一下,就有意义,利用 16 数字存放文字, 16 个字节,,表示两个字节完整文字,也就是 4 个像素,这样计算机可以通过图片,直接获取图片图像意义
    netpart1
    netpart1
    Jan 27, 2017 via iPhone
    22
    你这个东西除了发暗杀 令,而且逃避责任,有用,其他没有意义
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    23
    @netpart1 本来就是。。搞着玩的 = =
    creamiced
    creamiced
    Jan 27, 2017
    24
    数字水印
    netpart1
    netpart1
    Jan 27, 2017 via iPhone
    25
    楼主,你可以申请专利了,用这个 js 加密,绝对不会被破解,代码写在图片中, flash 加载图片,解码,运行代码,然后 flas 写很复杂,而且混淆,这样代码被破解可能性,大大减小
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    26
    @netpart1 用单纯的图像存放代码国外之前有人搞过 QAQ
    aitaii
    aitaii
    Jan 27, 2017
    27
    porn 可是推动互联网技术发展的一大动力呀
    netpart1
    netpart1
    Jan 27, 2017 via iPhone❤️1
    28
    想想希拉里被黑,就是通过这种方式,俄罗斯黑客先上传,足够多代码图片,然后经过一个可执行漏洞,然后就被黑了,而且找不到证据
    Daniel65536
    Daniel65536
    Jan 27, 2017 via iPhone
    29
    如果想做图种的话,直接搞二维码的模式啊,用偶数方块代表黑色区域,奇数方块代表白色区域,鲁棒性好很多的。

    另外一个有效的思路是搞傅立叶变换来写,鲁棒性更好
    ashfinal
    ashfinal
    Jan 27, 2017
    30
    关注一下
    imn1
    imn1
    Jan 27, 2017 via Android
    31
    linux, android, windows 都已经有现成的了,果家不清楚,你这个比起人家有什么优势么?
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    32
    @imn1 什么?
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    33
    @imn1 我们说的。。是一个东西吗?
    maomo
    maomo
    Jan 27, 2017
    34
    建议百度一下图像隐写,学术界论文一大把。你这个就是最简单的 LSB 隐写,毫无优势
    kaneg
    kaneg
    Jan 27, 2017 via iPhone
    35
    据说有公司在内部论坛里启用了此类技术来标示个人信息,无论截图, ps ,还是压缩,信息都不会丢失,如果网上有人传播,只要一还原就知道是谁泄密的。
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    36
    @kaneg 哪个是把图像隐藏在其中,大众点评用过
    lslqtz
    lslqtz
    Jan 27, 2017 via iPhone
    37
    群里看到的 支持
    Arcus
    Arcus
    Jan 27, 2017 via Android
    38
    感觉鲁棒性不强
    xuboying
    xuboying
    Jan 27, 2017 via Android
    39
    数字水印不是干这个的么,楼主造轮子么
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    40
    @xuboying 可能的确有不足的地方,但确实是我自己想出来的
    tankcong
    tankcong
    Jan 27, 2017
    41
    楼主造轮子了,隐写术,有很多算法了,[Steganography]( https://en.wikipedia.org/wiki/Steganography)
    Aaron99
    Aaron99
    OP
    Jan 27, 2017
    42
    @tankcong 同上
    eyp82
    eyp82
    Jan 27, 2017❤️1
    43
    还是鼓励一下楼主, 现在各行各业科学家这么多, 很难想出一个完全独创别人没搞过的领域, 能自己想出这个也确实很有创意. 大家不要打击. 个人很喜欢这类的帖子. 比口水贴好多了.
    sivacohan
    sivacohan
    Jan 27, 2017 via Android
    44
    能做出来挺了不起的。
    独立思考很重要。

    现在应该看看 digital watermarking
    或者隐写

    你的算法和上面提到的 LSB 很像。
    想要实现抗裁剪,基本就是把 rgb 三个通道的参数当成三个波。然后根据需要,把自己的数据放在高频部分或者低频部分。
    mritd
    mritd
    Jan 28, 2017 via iPhone
    45
    开车走起
    scnace
    scnace
    Jan 28, 2017 via Android
    46
    之前有教授来讲过这个隐写技术…(话说我那时候竟然没有反应过来可以开车!
    bellchu
    bellchu
    Jan 28, 2017 via Android
    47
    https://github.com/guardianproject/pixelknot
    想法不错,但是类似的东西早有很多, dos 视霸卡 win3.1 附近那年代就有了,当时也是为了开车,看 H 图(视频),小伙伴把自己的珍藏藏好, echo 路劲和密码在正常图片文件后面拷软盘刻光盘(贵)传阅。青春期第一次背着大人看 Playboy 女郎坐车,印象深刻。

    后来上大学的时候计算机图形学课就搞 RGB,HSL 藏字游戏了。建议楼主看看 imagemagick 之类的大开源项目,会有启发。

    我一直认为色情业推动人类社会发展进步。没有黄色网站哪里来那么多压缩技术,哪里来 YouTube …偏题了……
    unsec
    unsec
    Jan 28, 2017
    48
    @eyp82 @sivacohan

    这个技术早就很成熟了。我们至少五年前就已经应用。关键词: Steganography

    另外看了下楼主的代码,应该是刚接触编程不久的
    ryd994
    ryd994
    Jan 28, 2017
    49
    主要应该还是用于水印
    根据信息论,新图片压缩后大小越等于原图片压缩大小加数据大小
    现在的无损压缩算法,压缩率基本上能逼近信息熵了
    Aaron99
    Aaron99
    OP
    Jan 28, 2017 via Android
    50
    @ryd994 嗯。。 python 没系统学过
    Zohar
    Zohar
    Jan 28, 2017 via Android
    51
    活捉大佬一枚!滋辞滋辞ʕ•ٹ•ʔ
    UnknownR
    UnknownR
    Jan 28, 2017
    52
    safari 打不开网站, ie, edge, chrome 和 firefox 都能打开。。。 windows , linux 和 mac 上都试过了
    netpart1
    netpart1
    Jan 28, 2017 via iPhone
    53
    楼主是初学者,能够捣鼓这个出来,说明了发散思维,还可以,但是你要抓住重点,由于像素小幅度值改变得,在颜色改变上人眼不明显,而计算机则非常敏感,这个才是原理,要明白重点
    imn1
    imn1
    Jan 28, 2017 via Android
    54
    @Aaron99
    如果你这个跟 steganography 没关系,那就请慎用"隐写"这个词,会误导
    netpart1
    netpart1
    Jan 28, 2017 via iPhone
    55
    @imn1 这个截图, ps ,缩放,压缩等等,稍微处理一下,信息就没了,要解决以上问题,比实现上面得,复杂许多
    Rice
    Rice
    Jan 28, 2017 via iPhone
    56
    @starvedcat 某知名企业的是用傅立叶变换把信息加到频谱上吧?如果我没记错的话。
    imn1
    imn1
    Jan 28, 2017
    57
    @netpart1
    其实这个要根据场景,就像不同的话在不同语境意义相差甚远一样
    隐写其实重点在于传送“隐”的内容,而不在图片,传送过程中各个环节都应该清楚这点,不会随意改变图片
    如果传送的某个节点让外部随意改动,或者通过有可能会被改动的公众途径传送,他本身就有问题

    其实我手机上也有用隐写图片,记录了几个银行帐号,密码我可以用脑记,但那一长串银行帐号还真是记不住,又不想随便写在一个 TXT 里面
    unsec
    unsec
    Jan 28, 2017
    58
    @Aaron99 这个跟学没学过 Python 没关系。所有代码逻辑写一个 web.py 里还有 N 层级的 for ,这个不是语言问题,是编程思维还很初级

    另外你 at 错人了
    Aaron99
    Aaron99
    OP
    Jan 28, 2017 via Android
    59
    @unsec 编程也没学过,只是业余爱好
    netpart1
    netpart1
    Jan 28, 2017 via iPhone
    60
    @unsec 看楼主言谈举止就像,大学生,我也脑补成,计算机大学生了,看来这里面,水很深啊
    Aaron99
    Aaron99
    OP
    Jan 28, 2017
    61
    @netpart1 高三狗
    yukiww233
    yukiww233
    Jan 28, 2017
    62
    高三狗 厉害了
    http://www.yixieshi.com/54464.html 看了下某厂的数字水印,除了屏摄,抗干扰力很强啊
    基于像素的这方面应该还有些问题
    panda1001
    panda1001
    Feb 2, 2017 via Android
    63
    以前在实验楼里看到的
    https://zhuanlan.zhihu.com/p/22834362
    V9527
    V9527
    Apr 15, 2018
    64
    @starvedcat 看来钉钉 APP 的聊天界面(澡堂模式除外)用 ID 水印还算正大光明的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4856 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 760ms · UTC 06:56 · PVG 14:56 · LAX 22:56 · JFK 01:56
    ♥ Do have faith in what you're doing.