隐写术 - 图像



隐写术是一种通过将秘密信息嵌入音频、视频、图像或文本文件来隐藏秘密信息的方法。它是用来保护机密或敏感数据免受恶意攻击的方法之一。

有时,隐藏的内容在隐藏在另一个文件类型之前会被加密。如果它没有被编码,那么它可能会进行某种形式的修改,以增加其对检测的不可见性。

隐写术有时被比作密码学,因为两者都是秘密通信的形式。但是,这两个概念之间存在差异;与隐写术不同,隐写术不涉及在发送前加密数据或在接收后使用密钥解码数据。

术语“隐写术”来自希腊语“stegos”,意思是“覆盖”,以及“grayfia”,意思是“写作”。这可以翻译为“隐蔽的写作”或“隐藏的写作”。

它与密码学有何不同?

密码学和隐写术都是隐藏、隐藏或保护敏感数据的过程。它们的主要区别在于,密码学使数据不可读或隐藏其含义,而隐写术则隐藏数据的存在。

密码学通常用于补充隐写术提供的安全性。加密方法用于在敏感信息包含在封面文件中之前对其进行加密。

隐写术是如何工作的?

隐写术以避免检测的方式隐藏信息。最常见的方法之一被称为“最低有效位”(LSB)隐写术。这需要将秘密信息编码在媒体文件的最低有效位中。例如:

  • 图像文件中的每个像素都有三个字节的数据,每个颜色(红色、绿色和蓝色)一个字节。某些图像格式为透明度或“alpha”保留额外的第四个字节。
  • LSB隐写术更改每个字节的最后一位以隐藏一个数据块。要使用此方法隐藏一兆字节的数据,您需要一个大小为八兆字节的图像文件。
  • 修改像素值的最后一位不会导致图像发生可见变化,因此任何看到原始图像和隐写术修改后的照片的人都不会看到差异。

相同的策略可用于其他数字内容,如音频和视频,以在文件的导致对可听或可见输出变化最小的区域中隐藏数据。

另一种隐写术方法是替换单词或字母。这是秘密消息的发送者通过将其分布在一个更大的文本中来隐藏文本,并在特定间隔组织单词。虽然这种替换方法易于使用,但它可能会使文本显得不寻常且不合时宜,因为秘密单词在目标句子中在逻辑上不匹配。

其他隐写术方法包括隐藏硬盘上的完整分区或在文件和网络标题中插入数据。这些技术的成功取决于可以隐藏多少数据以及检测起来有多容易。

隐写术类型

从数字的角度来看,隐写术可以分为五类。它们如下:

  • 文本隐写术 - 这是在常规文本中隐藏隐藏消息的过程,例如将消息嵌入段落或句子中。
  • 图像隐写术 - 这是通过将消息嵌入其像素中来隐藏图像中信息的流程。
  • 音频隐写术 - 这是在音频录音中隐藏数据的方法,就像将消息嵌入声波中一样。
  • 视频隐写术 - 这是将数据秘密编码到视频文件中的技术,同时保留其外观。
  • 网络隐写术 - 网络隐写术是在网络流量中隐藏数据的过程,例如在计算机之间发送的数据包中编码消息。

图像隐写术

让我们在下面的部分中了解图像隐写术的算法以及它是如何工作的:

算法

以下是图像隐写术中常用方法和算法的简要概述:

  • 最低有效位 (LSB) 替换 − 此方法涉及将私密消息的位替换为图像像素的最低有效位 (LSB)。这些 LSB 除了其他因素外,在略微改变时对图像外观的影响不大。
  • 扩频 − 此方法的作用是分散对像素颜色值所做的微小更改,以便在图像的每个部分都隐藏秘密消息。
  • 变换域技术 − 这些技术涉及使用傅里叶变换将图像转换为另一个域(例如频域),然后在该域中隐藏秘密消息。一种流行的技术是离散余弦变换 (DCT),它用于 JPEG 压缩,并在像素块上应用。将信息嵌入变换域使得难以被察觉。
  • 视觉密码学 − 视觉密码学不是直接隐藏信息,而是将一条秘密消息分成许多份额或层,每份额单独来看都不能揭示任何关于原始文本的信息。
  • F5 算法 − F5 算法是一种基于嵌入的隐写术方法,它使用最低有效位 (LSB)。它确保通过修改这些像素的最低有效字节不会产生明显的更改,同时仍能实现最大容量。

这些技术和算法可用于许多隐写术工具和软件,用于将数据隐藏在图像中。根据应用程序的需求,它们提供不同级别的安全、容量和检测保护。

工作原理?

图像隐写术允许秘密信息以不易为人眼察觉的方式隐藏。以下是其一般工作原理的简单解释:

  • 第一步是选择一个用作载体或掩盖图像的图像。它应该是一个数据量大和复杂度高的图像,以便于隐藏额外信息。
  • 接下来,将隐藏的消息或秘密信息编码到掩盖图像中。可以使用不同的技术来实现这一点,例如 LSB 替换、扩频、变换域方法等。
  • 然后,根据所选方法来表示秘密消息的位,通过修改某些像素或颜色值,将编码后的消息嵌入到掩盖图像中。
  • 现在我们已经修改了包含隐藏消息的图片,让我们将其存储在所需位置或在必要时进行传输。修改后的图片看起来像任何其他普通的照片,普通人不会在意具体的工具或知识,除非他们想找出其中隐藏了什么。
  • 如果有人拥有足够的技能和工具,他可以检索这些隐形文本。这样的人会使用在嵌入过程中使用的类似算法或方法来检查更改后的图像,从而能够检测并从中提取隐蔽数据。
  • 根据程序的不同,可能会有一个验证步骤来确保隐藏的消息被正确且完美地提取。这可能涉及查找解码消息中的特定签名或模式。

使用 Python 实现

使用 LSB 替换,此代码将消息编码到图像中,然后从编码后的图像中解码消息。要运行此代码,请确保已在系统中安装 Python 图像库 (PIL)(pip install pillow)。

这是一个使用 LSB 替换进行图像隐写术的简单 Python 代码示例:

from PIL import Image

def encode_message(image_path, message):
   img = Image.open(image_path)
   binary_message = ''.join(format(ord(char), '08b') for char in message)

   if len(binary_message) > img.width * img.height * 3:
      raise ValueError("Message is too long to encode in the image")

   binary_message += '1111111111111110'  # Adding end of message marker

   index = 0
   for pixel in img.getdata():
      if index < len(binary_message):
         # Convert pixel RGB values to binary
         pixel = list(pixel)
         for i in range(3):
            pixel[i] = pixel[i] & ~1 | int(binary_message[index], 2)
               index += 1
            img.putpixel((index // 3 % img.width, index // 3 // img.width), tuple(pixel))
      else:
         break

   img.save("encoded_image.png")

def decode_message(image_path):
   img = Image.open(image_path)
   binary_message = ""

   for pixel in img.getdata():
      for value in pixel:
         binary_message += bin(value)[-1]

   # Extract the message 
   message = ""
   for i in range(0, len(binary_message), 8):
      byte = binary_message[i:i+8]
      if byte == '1111111111111110':
         break
      message += chr(int(byte, 2))

   return message

# function execution
encode_message("my_image.png", "This is a secret message.")
decoded_message = decode_message("encoded_image.png")
print("Decoded Message:", decoded_message)

输入/输出

在下面的输出中,我们可以看到两张不同的图像。第一张图像是应用隐写术算法之前的图像。第二张图像是应用算法之后的图像。您可以看到两张图像的大小。在输入图像中嵌入消息后,图像的大小会增加。

Image Steganography Output
广告