【问题标题】:How to extract appended data at the end of jpeg image (detecting jpeg EOF).如何在 jpeg 图像末尾提取附加数据(检测 jpeg EOF)。
【发布时间】:2017-09-05 19:12:03
【问题描述】:

由于 JPEG 图像中不需要存在 0xFFD9(作为 EOF 标记),即使存在它也可能由于 jpeg 中嵌入的缩略图而给出不正确的结果,因此我需要解析 JPEG 以提取任何附加数据(e ,g 拉链)。基于标记后跟 2 个字节长度的假设,我遵循了 Java 代码。但 SOS 段(即 0xFFDA 标记)并非如此。如何检测 JPEG 中的 EOF?

public String getJPEGAppendedData(DataInputStream in) {
    StringBuilder message = new StringBuilder();
    try {
        // reading first two bytes 0xFFD8
        in.readFully(new byte[2]);

        // 0xFFXX
        byte twoBytes[] = new byte[2];

        while (true) {
            in.readFully(twoBytes);
            if (twoBytes[0] == (byte) 0xFF) {
                    if (twoBytes[1] == (byte) 0xDD) {
                        // fixed 4 bytes payload
                        in.readFully(new byte[4]);
                    } else if (twoBytes[1] == (byte) 0xD9) {
                        // end of image reached
                        break;
                    } else if (twoBytes[1] >= (byte) 0xD0 && twoBytes[1] <= (byte) 0xD7) {
                        // no payload
                    } else {
                        // reading payload length form two bytes
                        short length = in.readShort();
                        System.out.println(length);

                        // skipping payload
                        for (int i = 1; i <= length - 2; i++) {
                            in.readByte();
                        }
                    }
            } else {
                break;
            }
        }

        // reading appended data (byte by byte) if any
        boolean moreData = true;
        while (moreData) {
            try {
                byte b = in.readByte();
                message.append(String.format("%02X", b));
            } catch (Exception e) {
                moreData = false;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return message.toString();
}

【问题讨论】:

    标签: java jpeg steganography


    【解决方案1】:

    我认为你不需要检测结束。

    如果您自己正在生成消息,那么您可以转到包含图像的字节数组的末尾并检测是否存在EOI (ddf9),如果没有,则只需将其添加到此处并附加您的消息。

    由于EOI 应该是图像的结尾,即使它已经存在,您也可以自己附加它。

    在读取从文件末尾读取的消息并检测ddf9(可能存在于消息本身中,因此最好选择更长的分隔符,如@@SecretMessageOfMine@@ 并检测它。

    例如下图

    您可以生成如下图像数组

    【讨论】:

    • 不,我自己没有生成消息。我的程序将接受任何图像并提取附加数据(如果有)(隐写术)。
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-07-24
    • 2013-10-02
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多