zoukankan      html  css  js  c++  java
  • 使用Python实现最低有效位隐写术的方式--快来看看吧!

    隐写术是一门关于在适当的多媒体载体中传输秘密数据的科学,例如在图像、音频和视频文件中。它的假设是,如果特征是可见的,那么攻击点就是明显的,因此这里的目标总是隐藏嵌入数据的存在。

    LSB图像隐写术

    LSB隐写术是一种图像隐写术技术,通过用要隐藏的信息位替换每个像素的最低有效位,将信息隐藏在图像中。为了更好地理解,将数字图像视为2D像素阵列,每个像素包含的值取决于其类型和深度。

    我们将考虑最广泛使用的模式——RGB(3×8位像素,真彩)和RGBA(4x8位像素,带透明遮罩的真彩),这些值的范围从0到255(8位值)。

    将图像表示为2D阵列的RGB像素

    通过使用ASCII表,可以将消息转换为十进制值,然后转换为二进制值,接着逐个迭代像素值,在将像素值转换为二进制后,将每个最低有效位替换为序列中的该消息位。

    要解码一个已编码的图像,只需颠倒这个过程:收集并存储每个像素的最后一位,将它们分成8个一组,并将其转换回ASCII字符,以得到隐藏的信息。

    PYTHON操作

    试着使用Python库PIL和NumPY来逐步实现上述概念。

    • 步骤1:导入所有必需的python库


    • 步骤2:启用编码器功能

    首先,编写代码,将源图像转换成一个NumPy像素阵列,并存储图像的大小。检查图像的模式是RGB还是RGBA,然后设置n的值。还需计算像素的总数。


    其次,在秘密消息的末尾添加一个分隔符(“$T3G0”),这样程序在解码时就知道什么时候该停止,将这个更新后的消息转换成二进制形式,并计算出所需的像素。


    接着,检查可用的总像素是否足够用于秘密消息。如果继续逐个迭代像素,并将它们的最低有效位修改为秘密消息的位,直到包括分隔符的完整消息已经被隐藏。


    最后,有了更新后的像素数组,可以使用它来创建并保存为目标输出图像。


    这样,编码器功能就完成了,是这样的:


    • 步骤3:启用解码器功能

    首先,重复类似的步骤,将源图像的像素保存为一个数组,计算模式,并计算总像素。


    其次,需要从图像左上角开始的每个像素中提取最低有效位,并以8个为一组存储。接下来,将这些组转换成ASCII字符来查找隐藏的消息,直到完全读取之前插入的分隔符。


    最后,检查是否找到了分隔符。如果没有,意味着图像中没有隐藏的信息。


    这样,我们的解码器功能就完成了,看起来应该是这样的:


    • 步骤4:制作主要功能

    对于主要功能,我们需询问用户想要执行哪个功能——编码还是解码。

    若是编码,则要求用户输入以下内容——带扩展名的源图像名称、秘密消息和带扩展名的目标图像名称。若是解码,则要求用户提供隐藏了消息的源图像。


    • 步骤5:把以上所有功能放在一起,我们的LSB图像隐写程序就准备好了。

    请注意,在一项研究中,观察到传统的LSB在JPEG的情况下是无效的,因为数据会因为其有损性质而在压缩时被操纵。而对于PNG图像,简单的LSB是适用的,在压缩时不会有任何数据损失。因此,最好只在PNG图像上运行你的程序。

    举例

    1.编码信息

    2.解码信息

    此文转载文,著作权归作者所有,如有侵权联系小编删除!

    原文地址:https://www.tuicool.com/articles/YBBrIvN

    需要源代码的点击这里下载

  • 相关阅读:
    案例详解:MTU不一致导致主机和RAC不断重启
    近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例->Oracle故障分析的方法论+DBA能力提升要领...
    一个模版让报表自动生成,领导:这才是数据分析人该干的事
    如何构造一个 SYN_SENT 状态的连接
    TCP 3次握手原理
    SpringCloud Alibaba微服务番外一
    socket bind 随机端口
    Yii项目Security加密解密类提取
    linux中iptables配置文件及命令详解详解
    linux中iptables配置文件及命令详解详解
  • 原文地址:https://www.cnblogs.com/wxys/p/13740250.html
Copyright © 2011-2022 走看看