仅在c#中的EOF标记之后读取字节

时间:2016-08-04 17:25:52

标签: c# eof steganography

所以我正在玩隐写术,在文本/图像/声音/视频之后我试图用可执行文件做smth。已知在EOF之后将隐藏消息放入这些文件中的方法。它在某种程度上为我工作,但我想知道我是否可以在EOF之后开始阅读隐藏的消息,而不是所有的字节。

我有将.exe读取到字节数组的代码,并在这些字节中添加其他信息:

public byte[] CreateHiddenMessage(byte[] container, byte[] message)
{
    byte[] newArray = new byte[container.Length + message.Length];

    //copy original bytes
    for (int i = 0; i < container.Length; i++)
    {
        newArray[i] = container[i];
    }

    //add hidden info
    for (int i = 0; i < message.Length; i++)
    {
        newArray[i + container.Length] = message[i];
    }

    return newArray;
}

然后,我保存这些字节没有任何问题,如:

public static void WriteToFile(String name, byte[] bytesToSave)
{
    System.IO.File.WriteAllBytes(name, bytesToSave);
}

现在问题是我面临的问题。新的可执行文件工作得很好,它有那些额外的字节,但当我试图检索隐藏的消息时,我必须经历所有这些字节并在我的应用程序中打印它们(首先是很多随机标志,然后是实际的消息)。

有没有办法在EOF标记出现后才开始读取那些隐藏的字节(并转换为字符)?我知道没有像EOF字符这样的东西&#34;,但仍然有任何想法?

我唯一的想法是在原始文件中隐藏消息的开头添加某种标题代码,例如&#34; ## $$ ## [message]&#34;,然后阅读全部字节只是在此代码之后开始转换字符。但我想避免它!

1 个答案:

答案 0 :(得分:1)

所以我决定采用Gerardo Grignoli的想法,并在持有消息的可执行文件的末尾写下隐藏消息的长度。