Сначала я получил три целых числа p1, p2, p3
.
Затем для каждого pixel
я получил r, g, b
значение и изменил его на
r * (3 ^ p1) % 256, g * (3 ^ p2) % 256, b * (3 ^ p3) % 256
.
Это была моя кодировка, и для ее декодирования для каждого пикселя в кодированном изображении я получил значение r, g, b и изменил его на
r * (3 ^ key1) % 256, g * (3 ^ key2) % 256, b * (3 ^ key3) % 256
, где каждый ключ 64 - соответствующий стр.
Я думаю, это должно работать, поскольку 3 ^ 64
совпадает с 1 в моде 256.
Моя идея неверна или есть проблема с моим алгоритмом?
Это мой алгоритм кодирования:
from PIL import Image
a = Image.open("up.jpg")
rgb_a = a.convert('RGB')
b = Image.new("RGB", a.size)
p1, p2, p3 = map(int, input().split())
x = 3 ** p1
y = 3 ** p2
z = 3 ** p3
for i in range(a.size[0]):
for j in range(a.size[1]):
r2, g2, b2 = rgb_a.getpixel((i, j))
r2 *= (x % 256)
g2 *= (y % 256)
b2 *= (z % 256)
r2 = r2 % 256
g2 = g2 % 256
b2 = b2 % 256
b.putpixel((i, j), (r2, g2, b2))
b.save("changer.jpg")
print("key 1 is", 64-p1)
print("key 2 is", 64-p2)
print("key 3 is", 64-p3)
И это мой алгоритм декодирования:
из PIL import Image
a = Image.open("changer.jpg")
rgb_a = a.convert('RGB')
b = Image.new("RGB", a.size)
key1, key2, key3 = map(int, input().split())
x = 3 ** key1
y = 3 ** key2
z = 3 ** key3
for i in range(a.size[0]):
for j in range(a.size[1]):
r2, g2, b2 = rgb_a.getpixel((i, j))
r2 *= (x % 256)
g2 *= (y % 256)
b2 *= (z % 256)
r2 = r2 % 256
g2 = g2 % 256
b2 = b2 % 256
b.putpixel((i, j), (r2, g2, b2))
b.save("comeback.jpg")