Publié le 2016.04.01 Une bibliothèque qui cache les données de caractères dans les images en utilisant Python. Vous pouvez également l'exécuter à partir de la ligne de commande. Fonctionne avec la série Python2.
install
install
pip install steganography
sample-code
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from steganography.steganography import Steganography
#Incorporer du texte dans l'image
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/b.jpg "
text = 'The quick brown fox jumps over the lazy dog.'
Steganography.encode(path, output_path, text)
#Chargez le texte caché dans l'image
secret_text = Steganography.decode(output_path)
python
#Incorporer du texte dans l'image
>>>steganography -e /tmp/image/a.jpg /tmp/image/b.jpg 'The quick brown fox jumps over the lazy dog.'
#Chargez le texte caché dans l'image
>>>steganography -d /tmp/image/b.jpg
The quick brown fox jumps over the lazy dog.
1-1. normalize Balayez tous les pixels de l'image et sélectionnez les pixels qui ont un reste de 1 lorsque chaque valeur RVB est divisée par 8. Modifiez la couleur du pixel sélectionné pour que le reste ne soit pas 1.
■ Pixels dont la couleur a été modifiée par le traitement de normalisation
Convertit le texte en hexadécimal. Divisez l'image en 16 pixels et changez la valeur de la couleur de pixel de la partie correspondante de sorte que le reste devienne 1 lorsque chaque valeur RVB est divisée par 8.
Lisez une image avec du texte masqué, divisez l'image en 16 pixels et identifiez les points de pixels où la couleur des pixels est 1 lorsque chaque valeur RVB est divisée par 8. La valeur hexadécimale est acquise à partir de la position du pixel du point, convertie du nombre hexadécimal en chaîne de caractères et sortie.
Vous pouvez facilement utiliser l'image en utilisant un oreiller.
open-image
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image
path = "/tmp/image/a.jpg "
img = Image.open(path)
img = img.convert('RGB')
for y in range(img.size[1]):
for x in range(img.size[0]):
r, g, b = img.getpixel((x, y))
print(r, g, b)
output
>>> python sample.py
(44, 81, 110)
(75, 109, 137)
(85, 114, 144)
(69, 99, 127)
(68, 105, 131)
(52, 94, 116)
(65, 103, 124)
(108, 130, 154)
(149, 150, 181)
(164, 148, 184)
(152, 132, 169)
....
red
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/sample_red.png "
img = Image.open(path)
img = img.convert('RGB')
def matched_pixel(r, g, b):
return r % 8 == g % 8 == b % 8 == 1
for y in range(img.size[1]):
for x in range(img.size[0]):
r, g, b = img.getpixel((x, y))
if matched_pixel(r, g, b):
#Réécrire les coordonnées spécifiées en rouge
img.putpixel((x, y), (255, 0, 0))
img.save(output_path, "PNG", optimize=True)
3-3. str hex converter
str-hex-converter
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
def to_hex(s):
return s.encode("hex")
def to_str(s):
return s.decode("hex")
base = "aiueo kakikukeko"
print(to_hex(base))
# >>> 616975656f206b616b696b756b656b6f
assert base == to_str(to_hex(base))
Pilow est utilisé pour lire et écrire des images. Le code source de la bibliothèque est disponible sur github. https://github.com/subc/steganography/blob/master/steganography/steganography.py
Recommended Posts