【问题标题】:Hide a message in the least significant image bit of a greyscale image在灰度图像的最低有效图像位中隐藏消息
【发布时间】:2017-04-24 10:12:00
【问题描述】:

我需要读入来自用户的消息,遍历消息的每个位,并用每个消息位覆盖最低有效图像位。

我目前有一个程序可以遍历每个图像像素并重写图像。

那么我如何读取最低有效位以及如何获取每个消息位。

这是使用 python 3.x 的灰度图像

from PIL import Image

import numpy as np
import bitget
import scipy.misc as smp

im = Image.open("catBlack.png") #Can be many different formats.
pix = im.load()
print (im.size )#Get the width and hight of the image for iterating over
print (pix[1,1]) #Get the RGBA Value of the a pixel of an image
#pix[x,y] = value # Set the RGBA Value of the image (tup


data = np.zeros( (im.size[0],im.size[1],2), dtype=np.uint8 )

for i in range (im.size[0]):
    for j in range (im.size[1]):
        print (i,j)
        data[i,j] = pix[i,j]

im = Image.fromarray(data)
im.save("GreyCat.png")

另外,我将如何解码出这条消息

为帮助干杯

【问题讨论】:

  • 我投票赞成关闭,因为你问的是隐写术的整个过程。如果您了解编码步骤,则解码应该与之相反。编码可以分解为您提出的更小的问题。但是,它们相当琐碎,12
  • 我对整个话题提出了质疑,因为我不知道从哪里开始?怎么办?我该如何更换。是不是让像素将其转换为位,然后将 asci 位值放在图像像素的 lsb 的位置。每个字符串字符是否占用多个位。我如何表示文本的结尾和文本的开头
  • 你可能想考虑现有的steganography_tools

标签: python image python-imaging-library steganography


【解决方案1】:

阅读消息后,您可以将其转换为 ascii 代码(ascii 范围在 0 到 127 之间),即您需要 max. 7位表示字母

灰度值可以从 0 到 255,每个像素有 8 位,因此您可以使用 4 个像素的最后 2 位来表示一个单词。

例如,您想发送嗨

h - 73 的ASCII码 二进制 73 - 1001001 我的ASCII码 - 74 我的ASCII码-1001010

  • 现在您将像您提到的那样遍历每个像素
  • 读取像素颜色值转换成二进制

假设颜色值为

第一个像素为 1111111
0101010 第二
1100110 第三
1111111 第四
0001111 代表第五
1011111 第六
1100110 第七
1110001 第八
1111111为第九
1010101为第十

首先我们必须传输 h (01001001) 所以我们将更改 4 像素的最后两位 新的颜色值将是这样的

第一个像素为 1111101
0101000 第二
1100110 第三
1111101 第四

现在对于 i (01001010) 值将类似于

0001101 代表第五
1011100 第六
1100110 第七
1110010 第八

现在我们将剩余像素的最后一位更改为全零
1111100 为第九
1010100为第十

【讨论】:

  • 超级。真的很好解释。一个问题是,对于其余的像素,您是将最后 2 位更改为 00 还是保持原样?
  • 您应该将它们更改为零,这将有助于识别消息的结尾(在解码时 ascii 0 的值为空)..如果您在解码消息时不将它们设为零它会尝试解码剩余的位,最后你会收到不需要的消息..
猜你喜欢
  • 2014-06-17
  • 2013-05-14
  • 2018-04-30
  • 1970-01-01
  • 2016-06-27
  • 2020-05-15
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多