Skip to content

AdvSteg

stegobox.codec.Akatsuki

Bases: BaseCodec

Akatsuki is a steganography method for Image. Source code derived from: https://github.com/Chiheb-Nexus/akatsuki

Source code in stegobox/codec/akatsuki.py
class Akatsuki(BaseCodec):
    """
    Akatsuki is a steganography method for Image.
    Source code derived from: https://github.com/Chiheb-Nexus/akatsuki
    """

    def encode(self, carrier: Image.Image, payload: str) -> Image.Image:
        """Encoder requires the carrier to be image file the payload to be
        txt file.

        Args:
            carrier: imgage file. Read with `stegobox.io.image.read()`.
            payload: txt file . Payload (secret executable file) to be
                encoded. Also read with `io.txt.read()`.

        Returns:
            Encrypted imgage file.
        """
        secretfilename = basename(payload).encode()

        with open(payload, "rb") as f:
            secretdata = f.read()

        header = bytearray(b"\0" * 128)
        header[0:4] = pack("<I", len(secretdata))
        header[4 : 4 + len(secretfilename)] = secretfilename
        header = header[:128]

        pixelmanipulator = PixelManipulator(carrier)

        bitfactory = BitFactory(secretdata)

        pixelmanipulator.apply_bits(header, bitfactory)
        return pixelmanipulator.get_img()

    def decode(self, carrier: Image.Image) -> str:
        """Decode the secret string from the carrier imgae file.

        Args:
            carrier: Encrypted image file bytes. Read with
                `io.image.read()`.

        Returns:
            The decoded string.
        """
        pixelscraper = PixelScraper(carrier)
        data = pixelscraper.get_data()
        secret_str = str(bytes(data), encoding="utf-8")
        return secret_str

encode(carrier, payload)

Encoder requires the carrier to be image file the payload to be txt file.

Parameters:

Name Type Description Default
carrier Image

imgage file. Read with stegobox.io.image.read().

required
payload str

txt file . Payload (secret executable file) to be encoded. Also read with io.txt.read().

required

Returns:

Type Description
Image

Encrypted imgage file.

Source code in stegobox/codec/akatsuki.py
def encode(self, carrier: Image.Image, payload: str) -> Image.Image:
    """Encoder requires the carrier to be image file the payload to be
    txt file.

    Args:
        carrier: imgage file. Read with `stegobox.io.image.read()`.
        payload: txt file . Payload (secret executable file) to be
            encoded. Also read with `io.txt.read()`.

    Returns:
        Encrypted imgage file.
    """
    secretfilename = basename(payload).encode()

    with open(payload, "rb") as f:
        secretdata = f.read()

    header = bytearray(b"\0" * 128)
    header[0:4] = pack("<I", len(secretdata))
    header[4 : 4 + len(secretfilename)] = secretfilename
    header = header[:128]

    pixelmanipulator = PixelManipulator(carrier)

    bitfactory = BitFactory(secretdata)

    pixelmanipulator.apply_bits(header, bitfactory)
    return pixelmanipulator.get_img()

decode(carrier)

Decode the secret string from the carrier imgae file.

Parameters:

Name Type Description Default
carrier Image

Encrypted image file bytes. Read with io.image.read().

required

Returns:

Type Description
str

The decoded string.

Source code in stegobox/codec/akatsuki.py
def decode(self, carrier: Image.Image) -> str:
    """Decode the secret string from the carrier imgae file.

    Args:
        carrier: Encrypted image file bytes. Read with
            `io.image.read()`.

    Returns:
        The decoded string.
    """
    pixelscraper = PixelScraper(carrier)
    data = pixelscraper.get_data()
    secret_str = str(bytes(data), encoding="utf-8")
    return secret_str