Esempio n. 1
0
def decode(imagepath, keypath, outputpath):
    image = Image.open(imagepath)
    key_image = Image.open(keypath)
    delimeter = DELIMETER.encode()
    delimeter = lina.message_to_binary(delimeter)
    delimeter = "".join(delimeter)
    width, height = image.size
    k_width, k_height = key_image.size
    if width * height != k_width * k_height:
        raise DifferentSizeError("size is different")
        return
    data_binary = ""
    buf = ""
    for pixel_i in range(width * height):
        row = pixel_i // width
        col = pixel_i % width
        k_row = pixel_i // k_width
        k_col = pixel_i % k_width
        pixel = image.getpixel((col, row))
        key_pixel = key_image.getpixel((k_col, k_row))
        if image.mode == "RGBA":
            pixel = pixel[:3]
        rgb = []
        for i in range(3):
            color = pixel[i]
            k_color = key_pixel[i]
            byte = lina.message_to_binary(color)
            k_byte = lina.message_to_binary(k_color)
            for j in range(8):
                if len(buf) == len(delimeter):
                    buf = buf[1:len(delimeter)]
                if (byte[j] == "1"
                        and k_byte[j] == "0") or (byte[j] == "0"
                                                  and k_byte[j] == "1"):
                    buf += "1"
                    data_binary += "1"
                else:
                    buf += "0"
                    data_binary += "0"
            if buf == delimeter:
                image.close()
                write_data(lina.cut_bytes(lina.split(data_binary)), outputpath)
                return
    image.close()
    write_data(lina.cut_bytes(lina.split(data_binary)), outputpath)
Esempio n. 2
0
def img_to_binary(imgpath, outputpath):
    image = Image.open(imgpath)
    width, height = image.size
    result_binary = ""
    for row in range(height):
        for col in range(width):
            pixel = image.getpixel((col, row))
            if image.mode == "RGBA":
                pixel = pixel[:3]
            for i in range(3):
                color = pixel[i]
                byte = lina.message_to_binary(color)
                result_binary += byte
    output_file = open(outputpath, "wb")
    output_file.write(lina.split(result_binary))
    output_file.close()
    image.close()
def reverse(dispersed_dir, output_file, original_size):
    filenames = os.listdir(dispersed_dir)
    filenames.sort()
    dispersed_data_list = []
    for filename in filenames:
        f = open(dispersed_dir + "/" + filename, "rb")
        dispersed_data_list.append("".join(lina.message_to_binary(f.read())))
        f.close()
    i = 0
    result = ""
    while True:
        j = i % len(filenames)
        k = i // len(filenames)
        if i / 8 > original_size:
            break
        result += dispersed_data_list[j][k]
        i += 1
    f = open(output_file, "wb")
    f.write(lina.split(result))
    f.close()
Esempio n. 4
0
def encode(secret_filepath, key_filepath, output_filepath):
    if os.path.getsize(secret_filepath) > os.path.getsize(key_filepath):
        raise SizeOverError("size over")
        return
    secret_file = open(secret_filepath, "rb")
    key_file = open(key_filepath, "rb")
    secret_data = secret_file.read()
    key_data = key_file.read()
    secret_file.close()
    key_file.close()
    secret_binary = "".join(lina.message_to_binary(secret_data))
    key_binary = "".join(lina.message_to_binary(key_data))
    result_binary = ""
    for i in range(len(secret_binary)):
        s_bit, k_bit = secret_binary[i], key_binary[i]
        r_bit = "0"
        if (s_bit == "1" and k_bit == "0") or (s_bit == "0" and k_bit == "1"):
            r_bit = "1"
        result_binary += r_bit
    result = lina.split(result_binary)
    result_file = open(output_filepath, "wb")
    result_file.write(result)
def disperse(filepath, output_dir):
    output_file_length = 8
    if output_dir is None:
        output_dir = "./output"
        os.mkdir(output_dir)
    f = open(filepath, "rb")
    binary = "".join(lina.message_to_binary(f.read()))
    f.close()
    results = []
    for i in range(output_file_length):
        results.append("")
    for b in range(len(binary)):
        bit = binary[b]
        bi = b % output_file_length
        results[bi] += bit
    for i in range(len(results)):
        results[i] += "0" * (8 - (len(results[i]) % 8))
    for i in range(output_file_length):
        results[i] = lina.split(results[i])
        f = open(output_dir + "/data-" + str(i).zfill(8), "wb")
        f.write(results[i])
        f.close()