Java 从LSB插入中检索位

Java 从LSB插入中检索位,java,embed,extract,decode,lsb,Java,Embed,Extract,Decode,Lsb,我在网上读到了关于LSB插入的内容,但它只介绍了如何向LSB插入位,但没有描述如何提取位。这就是我读到的那篇文章 我了解他们在下面使用的方法,但如何提取位?以下是获取加密消息的算法: 阅读图片 迭代像素 将像素分解为RGB值(一个字节表示R,一个字节表示G,一个字节表示B) 从红色开始取LSB。如果LSB位为零,则可以和掩码为1(位00000000 1)的红色值。因此,lsbValue=rvalue&0x01。将lsbValue(它将仅为一或零)置于最高位 从格林那里拿到LSB。将其置于下一个最

我在网上读到了关于LSB插入的内容,但它只介绍了如何向LSB插入位,但没有描述如何提取位。这就是我读到的那篇文章


我了解他们在下面使用的方法,但如何提取位?

以下是获取加密消息的算法:

  • 阅读图片
  • 迭代像素
  • 将像素分解为RGB值(一个字节表示R,一个字节表示G,一个字节表示B)
  • 从红色开始取LSB。如果LSB位为零,则可以
    掩码为1(位00000000 1)的红色值。因此,
    lsbValue=rvalue&0x01
    。将lsbValue(它将仅为一或零)置于最高位
  • 从格林那里拿到LSB。将其置于下一个最高位
  • 从blue获得LSB。把这个放在下一位
  • 读取下一个像素并分解为RGB字节
  • 将颜色组件的LSB填充到位位置,直到填充完一个字节。这是加密mesage的第一个字节
  • 继续迭代像素及其RGB值,直到处理完所有像素
  • 检查已解密的字节。实际的信息应该是显而易见的。加密消息之外的任何内容都只是噪声,即实际图像像素的LSB

  • 一旦知道哪些像素是包含隐藏信息的像素,您只需要读取这些像素的每个颜色分量的最低有效位。但我尝试读取的每个颜色的最低有效位不是原始位。由于插入的二进制值1000011,某些位发生了更改。如何从LSB中检索原始位??如果原始位指的是原始图像中的位,则一旦应用LSB插入,就无法将其取回。修改后的图像中没有足够的信息来知道原始位是什么。是的,我指的是原始图像中的位或(二进制值1000011,本文尝试嵌入)。没有办法把这些比特取回??1。原始图像=未修改的图像,处理前的字节数。2.LSB Image=沿字节串某处插入隐藏信息(例如
    1000011
    )的图像。现在,如果您有图像2,您可以返回
    1000011
    ,如第一条评论中所述。如果只有图像2,则无法获取图像1中这些位的值。谢谢你,iReder,我理解解码步骤,但我不知道如何从每个像素的LSB中准确获取原始位。LSB只有一位。您可以通过屏蔽除最低有效位之外的所有位来获得LSB,使用一位作为屏蔽。我已经更新了我的答案,其中有一些细节。谢谢你。我现在明白了。非常感谢。