louys louys

图像隐写与检测

in 不务正业read (445) 文章转载请注明来源!

前言

隐写主要是尝试了一下lsb和dct,检测尝试了一下用01分布和rs分析法。

1.lsb

lsb主要是参照着https://github.com/livz/cloacked-pixel这个搓的代码

可以学习一下作者的数据处理部分。


def parse_data(data):
    result = []
    size = len(data)
    bt = [ord(d) for d in struct.pack('i',size)]
    bt += [ord(d) for d in data]
    for b in bt:
        for i in range(7, -1, -1):
            result.append((b >> i) & 0x1)
    return result


def decode_data(l):
    bt = ''
    for pos in range(0,len(l)/8):
        byte = 0
        for i in range(0,8):
            byte = (byte<<1) + l[pos*8+i]
        bt = bt+chr(byte)
    size = struct.unpack("i", bt[:4])[0]
    return bt[4:size+4]

分别是把字符转化成01串以及把01串转化成字符。用四个字节先把长度写进去,这样解密的时候就能知道结束的位置了。

2.dct

lsb的原理是在rgb通道的最后一位写数据,而dct就是用离散傅里叶变化将图像转化成频域的形式,其中低频部分保存了大部分能量,高频部分就能被用来写数据。原理为通过调整两个块中的dct系数的相对大小来对信息编码。

1

然后就是如何选择这两个系数,不至于对图像本身造成过大的影响。2

可以选择在jpg压缩算法中亮度量化表中一样的系数。

最后为了应对一定的压缩变化,可以将dct系数的差值放大。根据实验可以将阈值设为20到30就能应对30%到40%的压缩率了。

具体实现可以参考Stack Overflow上面的demo

https://stackoverflow.com/questions/42970392/zhao-kochs-steganography-algorithm-realization-extraction-issue

3.rs分析法

lsb检测的核心假设就是经过lsb隐写的图像,其最低比特位的分布满足随机性,既01分布的取值概率都为0.5,而没隐写过的图像就没有这种特性。

rs分析法就是基于这种假设。设计了F1和F-1操作。分别翻转最低位比特和最低两位比特。由于lsb的隐写操作只翻转了最低比特位,所以在F1操作和F-1操作下会有比较明显的统计差异。

更加详细的可以看https://wenku.baidu.com/view/1ad51bd676eeaeaad1f3302b.html,其中还给出了通过rs分析来计算密写率的方法。

实现起来也比较简单,F1操作和F-1操作其实就是对奇偶数加减的操作,定义好Rm,R_m,Sm,S_m的计算方法然后把图片切块计算就行了。

3

可以发现统计下来的差距还是蛮大的。

jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆