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

C# 在c中仅在EOF标记后读取字节#,c#,eof,steganography,C#,Eof,Steganography,所以我玩了一点隐写术,在文本/图像/声音/视频之后,我尝试用可执行文件进行smth。在这些文件中,有一种将隐藏消息放在EOF之后的已知方法。它在某种程度上对我有效,但我想知道我是否只能在EOF之后开始阅读隐藏的消息,而不是所有的字节 我有将.exe读取到字节数组并在这些字节中添加其他信息的代码: public byte[] CreateHiddenMessage(byte[] container, byte[] message) { byte[] newArray = new byte[

所以我玩了一点隐写术,在文本/图像/声音/视频之后,我尝试用可执行文件进行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;
}
现在我面临一个问题。新的可执行文件工作得很好,它有这些额外的字节,但当我试图检索隐藏的消息时,我必须遍历所有这些字节并在我的应用程序中打印它们(首先是大量随机符号,然后是实际的消息)

只有在EOF标记出现后,才有办法开始读取这些隐藏字节(并转换为字符)?我知道没有像“EOF角色”这样的东西,但是,还有什么想法吗


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

因此,我决定采用的想法是,将隐藏消息的长度写在保存消息的可执行文件的末尾。

不要回避它。去做吧。或者,在消息的最末尾,添加一个32位的数字,精确显示消息的长度。然后只读取结尾的字节数。我的最佳建议是在文件末尾添加消息的长度,例如45,然后从最后一个位置读取45个字符,这样就不需要读取所有字符来查找消息,你知道你的信息的位置和长度。哦,这确实是一个好主意,放置一个数字来指示隐藏信息的长度。我将把它应用到代码中。这样,我就不需要以低成本(比如消息末尾的32位数字需要额外4个字节)遍历所有字节(对于exe文件,通常是一个lof)。
public static void WriteToFile(String name, byte[] bytesToSave)
{
    System.IO.File.WriteAllBytes(name, bytesToSave);
}