返回顶部
首页 > 资讯 > 后端开发 > Python >怎么使用Python实现最低有效位隐写术
  • 142
分享到

怎么使用Python实现最低有效位隐写术

2023-06-16 03:06:48 142人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“怎么使用python实现最低有效位隐写术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python实现最低有效位隐写术”吧!LSB图像隐写术LSB隐写术是一种图像

这篇文章主要讲解了“怎么使用python实现最低有效位隐写术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python实现最低有效位隐写术”吧!

LSB图像隐写术

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

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

怎么使用Python实现最低有效位隐写术

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

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

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

PYTHON操作

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

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

import numpy as np from PIL import Image
  • 步骤2:启用编码器功能

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

def Encode(src, message, dest):     img = Image.open(src, 'r')     width, height = img.size    array = np.array(list(img.getdata()))     if img.mode == 'RGB':         n = 3         m = 0     elif img.mode == 'RGBA':         n = 4         m = 1     total_pixels = array.size//n

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

message += "$t3g0" b_message = ''.join([fORMat(ord(i), "08b") for i in message]) req_pixels = len(b_message)

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

if req_pixels > total_pixels:     print("ERROR: Need larger filesize")else:    index=0    for p in range(total_pixels):         for q in range(m, n):             if index < req_pixels:                 array[p][q] =int(bin(array[p][q])[2:9] + b_message[index], 2)                 index += 1

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

array=array.reshape(height, width, n) enc_img = Image.fromarray(array.astype('uint8'), img.mode) enc_img.save(dest)print("Image Encoded Successfully")

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

def Encode(src, message, dest):     img = Image.open(src, 'r')    width, height = img.size    array = np.array(list(img.getdata()))    if img.mode == 'RGB':        n = 3        m = 0    elif img.mode == 'RGBA':        n = 4        m = 1    total_pixels = array.size//n     message += "$t3g0"     b_message = ''.join([format(ord(i),"08b") for i in message])     req_pixels = len(b_message)     if req_pixels > total_pixels:         print("ERROR: Need largerfile size")    else:        index=0        for p in range(total_pixels):             for q in range(m, n):                 if index < req_pixels:                     array[p][q] =int(bin(array[p][q])[2:9] + b_message[index], 2)                     index += 1         array=array.reshape(height,width, n)         enc_img =Image.fromarray(array.astype('uint8'), img.mode)         enc_img.save(dest)        print("Image EncodedSuccessfully")
  • 步骤3:启用解码器功能

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

def Decode(src):     img = Image.open(src, 'r')     array = np.array(list(img.getdata()))     if img.mode == 'RGB':         n = 3         m = 0     elif img.mode == 'RGBA':         n = 4         m = 1     total_pixels = array.size//n

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

hidden_bits = "" for p in range(total_pixels):     for q in range(m, n):         hidden_bits +=(bin(array[p][q])[2:][-1]) hidden_bits = [hidden_bits[i:i+8] for i in range(0, len(hidden_bits), 8)] message = "" for i in range(len(hidden_bits)):     if message[-5:] == "$t3g0":         break     else:         message +=chr(int(hidden_bits[i], 2))

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

if "$t3g0" in message:     print("Hidden Message:",message[:-5]) else:     print("No Hidden MessageFound")

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

def Decode(src):     img = Image.open(src, 'r')    array = np.array(list(img.getdata()))    if img.mode == 'RGB':        n = 3        m = 0    elif img.mode == 'RGBA':        n = 4        m = 1    total_pixels = array.size//n     hidden_bits = ""     for p in range(total_pixels):         for q in range(m, n):             hidden_bits +=(bin(array[p][q])[2:][-1])     hidden_bits = [hidden_bits[i:i+8] fori in range(0, len(hidden_bits), 8)]     message = ""     for i in range(len(hidden_bits)):         if message[-5:] =="$t3g0":            break        else:            message +=chr(int(hidden_bits[i], 2))    if "$t3g0" in message:        print("Hidden Message:",message[:-5])    else:        print("No Hidden MessageFound")
  • 步骤4:制作主要功能

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

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

def SteGo():     print("--Welcome to$t3g0--")     print("1: Encode")     print("2: Decode")     func = input()     if func == '1':         print("Enter Source ImagePath")         src = input()         print("Enter Message toHide")         message = input()         print("Enter Destination ImagePath")         dest = input()         print("Encoding...")         Encode(src, message, dest)    elif func == '2':         print("Enter Source ImagePath")         src = input()         print("Decoding...")         Decode(src)    else:         print("ERROR: Invalid optionchosen")
  • 步骤5:把以上所有功能放在一起,我们的LSB图像隐写程序就准备好了。

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

举例

怎么使用Python实现最低有效位隐写术

编码信息

怎么使用Python实现最低有效位隐写术

解码信息

怎么使用Python实现最低有效位隐写术

感谢各位的阅读,以上就是“怎么使用Python实现最低有效位隐写术”的内容了,经过本文的学习后,相信大家对怎么使用Python实现最低有效位隐写术这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么使用Python实现最低有效位隐写术

本文链接: https://lsjlt.com/news/282320.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Python实现最低有效位隐写术
    这篇文章主要讲解了“怎么使用Python实现最低有效位隐写术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python实现最低有效位隐写术”吧!LSB图像隐写术LSB隐写术是一种图像...
    99+
    2023-06-16
  • c++保留有效位数怎么实现
    在C++中,可以使用std::setprecision函数来控制输出的有效位数。该函数位于头文件中。以下是一个示例代码: #incl...
    99+
    2023-10-23
    c++
  • 如何在 Django 中使用 Python 编写最有效的算法?
    Python 是一种高级编程语言,被广泛用于算法开发。而 Django 是一种流行的 Python Web 框架,它提供了一种简单易用的方式来构建 Web 应用程序。在本文中,我们将探讨如何在 Django 中使用 Python 编写最有效...
    99+
    2023-07-19
    编程算法 linux django
  • Python怎么实现位图分割的效果
    这篇文章主要讲解了“Python怎么实现位图分割的效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现位图分割的效果”吧!话不多说,直接来代码。import cv...
    99+
    2023-06-25
  • 怎么在Python中使用xpath实现定位
    这篇文章给大家介绍怎么在Python中使用xpath实现定位,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、xpath:基本属性定位用以下xpath方法定位二、xpath:其他属性定位在实际工作过程中,往往会遇到一个...
    99+
    2023-06-15
  • 如何使用Python和Bash编写最有效的编程算法?
    在编写编程算法时,Python和Bash是两个非常实用的编程语言。它们都具有强大的功能和灵活性,可以帮助程序员更快地编写高效的算法。在本文中,我们将介绍如何使用Python和Bash编写最有效的编程算法。 一、Python编写算法 Pyth...
    99+
    2023-06-24
    bash 编程算法 编程算法
  • 使用canvas怎么实现一个手写签名效果
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个手写签名效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTML代码:<!--手写区-->   &...
    99+
    2023-06-09
  • 怎么用Python实现学写作
    今天小编给大家分享一下怎么用Python实现学写作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开发工具Python版本:3...
    99+
    2023-06-27
  • 如何在Python shell中使用函数编写最有效的编程算法?
    Python是一种高级语言,它可以帮助我们快速编写出高效的算法。在Python中,函数是一种非常重要的编程元素,可以帮助我们组织代码和提高代码的可读性。在本文中,我们将介绍如何在Python shell中使用函数编写最有效的编程算法。 一、...
    99+
    2023-07-08
    shell 函数 编程算法
  • 怎么使用Java工具类实现高效编写报表
    本篇内容主要讲解“怎么使用Java工具类实现高效编写报表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java工具类实现高效编写报表”吧!为什么使用java代码写报表对于报表数据大部分情...
    99+
    2023-07-04
  • 使用Ajax技术实现实时数据交互的有效方法
    利用Ajax技术实现无刷新数据交互的实用方法 在Web开发中,数据的实时交互是一个非常重要的功能。传统的浏览器请求刷新页面的方式已经不能满足用户的需求,因此,Ajax技术应运而生。Ajax(Asynchronous JavaSc...
    99+
    2024-01-26
    ajax 数据交互 无刷新
  • 怎么使用vue实现简单的点击显示与隐藏效果
    本文小编为大家详细介绍“怎么使用vue实现简单的点击显示与隐藏效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用vue实现简单的点击显示与隐藏效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。目前前端框...
    99+
    2023-07-04
  • Python使用os模块实现更高效地读写文件
    目录使用 os.open 打开文件使用 os.read 读取文件使用 os.write 写入文件使用 os.open 打开文件 无论是读文件还是写文件,都要先打开...
    99+
    2024-04-02
  • Python 开发技术和自然语言处理:用最少的代码实现最大的效果。
    Python 开发技术和自然语言处理:用最少的代码实现最大的效果 自然语言处理(Natural Language Processing,NLP)是人工智能领域中最受关注的研究领域之一。NLP 是一种使计算机能够理解、解释和生成人类语言的技术...
    99+
    2023-08-10
    开发技术 自然语言处理 linux
  • 怎么在Python下使用Pygame实现时钟效果
    这篇文章主要讲解了“怎么在Python下使用Pygame实现时钟效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python下使用Pygame实现时钟效果”吧!本文实例为大家分享了P...
    99+
    2023-06-20
  • 使用python怎么实现一个文件读写函数
    本篇文章给大家分享的是有关使用python怎么实现一个文件读写函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。用到xlrd库函数需要预先install命令:pip insta...
    99+
    2023-06-06
  • uniapp项目中怎么用js实现隐藏view的效果
    UniApp是一款基于Vue.js框架的跨平台开发工具,拥有丰富的组件库和API,可以快速开发出高质量的跨平台应用程序。在实际开发中,我们经常需要控制页面上的某些视图组件的显示与隐藏,本文将介绍UniApp中如何使用JavaScript实现...
    99+
    2023-05-14
  • 使用css怎么实现图片溢出隐藏
    这篇文章将为大家详细讲解有关使用css怎么实现图片溢出隐藏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。css图片怎么溢出隐藏?新建一个html文件,命名为test.html,用于讲解div...
    99+
    2023-06-15
  • 怎么用Python实现烟花效果
    本篇内容主要讲解“怎么用Python实现烟花效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现烟花效果”吧!效果如下:这里给出代码,祝各位老哥新年快乐。import&nbs...
    99+
    2023-06-29
  • 怎么用Python实现岗位分析报告
    本篇内容介绍了“怎么用Python实现岗位分析报告”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、本文目标获取 Ajax 请求,解析 JS...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作