基于python的LSB隐写与分析

隐写

效果

隐写前

隐写后

灰度值直方图差别

部分源码

def dec_to_bin(dec):
    return '{:08b}'.format(dec)

def bin_to_dec(binary_code):
    dec = 0
    for i in range(len(binary_code) - 1):
        dec = dec + int(binary_code[i]) * int(pow(2, 7 - i))
    return dec

# 文件信息转二进制流
def read_data_file(path):
    fp = open(path, "rb")
    stream = ""
    s = fp.read()
    for i in range(len(s)):
        tmp = bin(s[i]).zfill(8)
        stream = stream + tmp.replace('0b', '')
    fp.close()
    return stream

def lsb(image, data_stream, random_index):
    for i in range(len(stream)):
        x = random_index[i] % image.shape[0]
        y = int(random_index[i] / image.shape[0])
        value = image[x, y]
        if value % 2 != stream[i]:
            if value % 2 == 1:
                image[x, y] = value - 1
            else:
                image[x, y] = value + 1
    return image

分析

效果

由于二次隐写的随机性,分析图片存在误差,但能够看出是否被隐写

原图

隐写后

部分源码

# 进行二次隐写
def random_steg(image, rate):
    pixel_len = image.shape[0] * image.shape[1]
    random_ls = random.sample(range(0, pixel_len), int(pixel_len * rate))
    random_ls.sort()
    for i in random_ls:
        k = random.randint(0, 1)
        x = i % image.shape[0]
        y = int(i / image.shape[0])
        value = image[x, y]
        if not value % 2 == k:
            if value % 2 == 1:
                image[x, y] = value - 1
            else:
                image[x, y] = value + 1
    return image

# 获取灰度值
def get_gary_value(my_img):
    pixel_value = []
    gary_index = []
    for i in range(256):
        pixel_value.append(0)
        gary_index.append(i)
    for i in range(my_img.shape[0]):
        for j in range(my_img.shape[1]):
            pixel_value[my_img[i][j]] = pixel_value[my_img[i][j]] + 1
    return pixel_value, gary_index

# 计算F1,F2
def calculate_f1f2(values):
    f1 = 0
    f2 = 0
    for i in range(128):
        tmp = abs(values[2 * i + 1] - values[2 * i])
        f1 += tmp
    for j in range(127):
        tmp = abs(values[2 * j + 2] - values[2 * j + 1])
        f2 += tmp
    f2 += abs(values[0] - values[255])
    return f1, f2

# 分析函数
def analysis(path):
    img = cv2.imread(path, 0)
    # 二次随机隐写
    F1 = []
    F2 = []
    index = []
    for k in range(11):
        rate = k / 10
        index.append(rate)
        new_img = random_steg(img, rate)
        new_count, new_index = get_gary_value(new_img)
        f_1, f_2 = calculate_f1f2(new_count)
        F1.append(f_1)
        F2.append(f_2)
    draw(F1, F2, index)

相关链接

项目链接

linzijie1998/lsb_steg_analysis

参考文档

隐写与隐写分析

原文地址:https://www.cnblogs.com/linzijie1998/p/11045131.html

时间: 2024-10-31 14:35:36

基于python的LSB隐写与分析的相关文章

LSB隐写加密MISC

没有做过LSB隐写加密的题目,在buuoj上面做到了就记录一下,估计后面很长的时间都会在这个平台上面训练自己的MISC和WEB,是很好的平台,把很多比赛的原题和安恒的周赛的复现了. 题目是MISC里面的 前面的zip隐写就不说了,压缩包注释里面的东西可见之后就可以拿到压缩包密码,接着我们获得了一张女神的照片. 看师傅们的博客知道了这里是LSB隐写加密,github上面有LSB解密的脚本. https://github.com/livz/cloacked-pixel 我们下载到本地之后,运行的时候

四道图片隐写题

第一题 打开压缩包得到的是一张PNG格式的图片 首先拖放到010Editor中: CTRL+F 搜索IHDR发现只有一个,没有其他问题 然后放到KALI中分析一波: 图片能够在kali中打开,说明不是宽高的隐写,因为如果修改了宽高在linux中是无法正常显示的 然后binwalk分析一波: 同样的没有什么问题 最后就是放到 stegslove里面试一试了 简单的科普一下png的知识 png支持RGBA四个通道,每个通道占8个二进制位,隐写文件或数据一般都在各个通道的低位,因为低位的变化不会引起较

android——隐写软件

趁热打铁 完成对话框选择文件之后 在其基础上写了个在图片上实现LSB隐写功能的软件 不多说 上代码下载链接 http://download.csdn.net/detail/u012409883/7840495  主界面图如下: 隐写活动界面 选择隐写图片目录对话框 提取信息活动界面

基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)

目录 1 准备工作 2 具体实施   1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用:提供string.list.set.zset.hash等数据结构的存储,并支持数据的备份. 本文适合使用的场景:当一个项目中Redis缓存的数据量逐渐增大,Redis缓存的数据占用内存也会越来越大,而且其中有很多很可能是价值不大的数据.由于Redis是一个key-value数据库,所以对其中的数

符号执行-基于python的二进制分析框架angr

转载:All Right 符号执行概述 在学习这个框架之前首先要知道符号执行.符号执行技术使用符号值代替数字值执行程序,得到的变量的值是由输入变 量的符号值和常量组成的表达式.符号执行技术首先由King在1976年提出 ,经过三十多年的发展,现在仍然被广泛研究,它在软件测试和程序验证中发挥着重 要作用.符号执行是一种重要的形式化方法和静态分析技术,它使用数学和逻辑 首先定义一些基本概念.程序的路径(path)是程序的一个语句序列,这个 语句序列包括程序的一些顺序的代码片段,代码片段之间的连接是由

【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (1)kNN算法_手写识别实例--基于Python和NumPy函数库 1.kNN算法简介 kNN算法,即K最近邻(k-NearestNeighbor)分类算法,是最简单的机器学习算

基于python adb 命令写的小小测试安卓性能压力的脚本

今天闲来无事,写了一个基于Python的脚本,主要实现脚本运行adb shell命令,后期如果需要其他功能,依旧可以在此基础上进行扩展.废话不多说,上脚本,截图.源码在下边. os test_adb_port():     os.system()     i = ().readline()     j = i.split()[-]     c = j.replace(, )     = os.system(%c)     os.system()     os.system() test_test

LSB最低有效位隐写入门

LSB也就是最低有效位 (Least Significant Bit) 被替换成传递的信息字节.对原图影响很小. 这题可以算是隐写工具[wbStego]的使用入门练习题吧. 第一步,告诉你工具是支持在BMP文件中隐写的. 第二步,我们选用的解密功能Decode 第三步,选择源文件 第四步,问密码,没密码直接[Continue] 第五步,给起一个好听的输出文件名字 第六步,设置完成,准备发射啦. 结果当然是成功啦 很奇怪产生的文件名是1.txt._is, 用[WinHex]看一看,有CTF{}

隐写分析算法中的检测指标

隐写分析算法中的检测指标 隐写分析中的样本共有2类:原始载体Cover和含密载体Stego.设Stego为正样本P=Positive,Cover为负样本N=Negative.则分布如下: (1) TP=True Positive:把Stego正确检测为Stego (2) FP=False Positive:把Cover错误检测为Stego (3) TN=True Negative:把Cover正确检测为Cover (4) FN=False Negative:把Stego错误检测为Cover 各指