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

本文关键字:读取 字节 EOF 仅在 | 更新日期: 2023-09-27 18:00:57

所以我在玩隐写术,在文本/图像/声音/视频之后,我试图用可执行文件进行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角色"这样的东西,但是,还有什么想法吗?

我唯一的想法是在原始文件中隐藏消息的开头放一些标题代码,比如"###$$#[message]",然后在读取所有字节后开始转换代码后面的字符。但我想避免它!

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

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