【问题标题】:Bitwise Operations in a Steganography Program (C)隐写程序中的按位运算 (C)
【发布时间】:2012-04-11 12:21:14
【问题描述】:

我对 C 和按位运算都比较陌生,而且我在完成课堂上的作业时遇到了麻烦。大部分代码已提供给我,但我一直在找出与按位运算有关的部分时遇到问题。一旦我弄清楚这部分,我会很高兴。希望有人能帮忙!

这是我作业的摘录:

您需要使用 8 个字节的图像来隐藏 1 个字节的信息(请记住,只能修改封面图像的 LSB)。您将使用封面图像的其余 16 个字节来嵌入 b.size 的 16 位(二进制数据的大小字段的两个最低有效字节),接下来的 32 个封面将用于嵌入文件扩展名 对于有效负载文件,然后您将使用 8*b.size 字节来嵌入有效负载(b.data)。

这个程序正在做的是图像的速记,我必须使用我创建的文件中的数据修改读取的图像的最低有效位。就像我说的,所有的代码都已经写好了。我只是不知道如何修改 LSB。任何帮助将不胜感激!!!

我必须用于重新格式化 LSB 的函数如下:

byte getlsbs(byte *b);
void setlsbs(byte *b, byte b0);

这是我迄今为止尝试过的:

/* In main function */
b0 = getlsbs(&img.gray[0])

/* Passing arguments */
byte getlsbs(byte *b)
{
    byte b0;
    b0[0] = b >> 8;
    return b0;
}

老实说,我完全不知所措。我整晚都在做这件事,但我仍然几乎没有取得进展。

【问题讨论】:

  • 顺便说一句:stenography // steganography - 请更正您的帖子
  • 我很抱歉;我并不是故意让它看起来像是我试图为我完成它。我尝试过的一切都失败了,因为我似乎无法理解按位运算。在我的大学生涯中,我从来没有和他们打过交道。
  • 然后发布您尝试过的代码,以便人们可以解释您做错了什么。
  • 到目前为止我所尝试的是将图像的每个字节传递给 getlsbs() 函数并附加一个数组。之后,我想尝试看看是否可以手动编辑值(可能在循环中),但我一直卡在这一点上。我尝试过的任何方法似乎都不起作用。
  • 发布您尝试过的代码,然后将其添加到您的问题中。

标签: c bit-manipulation bitmask operations


【解决方案1】:

设置 b 的 LSB 为 1:

b |= 1;

将 b 的 LSB 设置为 0:

b &= 0xFE;

以下是如何实现这些功能的想法。此代码未经测试。

byte getlsbs(byte *b)
{
    byte result = 0;
    for (int i = 0; i < 8; ++i)
    {
        result >>= 1;
        if (*b & 1)
            result |=  0x80;
        ++b;
    }
    return result;
}

void setlsbs(byte *b, byte b0)
{
    for (int i = 0; i < 8; ++i)
    {
        if (b0 & 1)
            *b |= 1;
        else
            *b &= 0xFE;
        ++b;
        b0 >>= 1;
    }
}

【讨论】:

  • +1。虽然我希望 OP 提到了他被允许使用多少个 LSB(我不认为只有 1 个,因为他使用了“位”这个词)。
  • 很抱歉没有关注这个帖子;我最近忙于其他课程,没有太多时间专注于这个项目。我很感激帮助!我会尝试一下,如果这能解决我的问题,请告诉您。我相信我现在开始更好地理解按位运算。此外,对于我上面的海报,我确实必须操作多个字节,但我允许在主函数中使用循环结构来处理这个问题。从外观上看,这可能会解决我在获取和设置 LSB 时遇到的问题。
  • 您为 getlsbs 创建的解决方案似乎运行良好,但不幸的是,设置它们似乎无法正常运行。不过,我非常感谢你让我走到这一步。我之前很卡。我会和他们一起玩,看看我是否能让他们正常工作
  • 没关系,我找到了问题所在。我写错了你给我的代码。非常感谢!
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多