
Programme Python pour stéganographier des fichiers dans des images en utilisant le bit de poids le plus faible.
Programme Python basé sur des méthodes stéganographiques pour cacher des fichiers dans des images en utilisant la technique du bit de poids faible (Least Significant Bit).
J'ai utilisé la méthode la plus basique, à savoir le bit de poids faible. Un pixel couleur est composé de rouge, vert et bleu, codé sur un octet. L'idée est de stocker l'information dans le premier bit de chaque composante RVB d'un pixel. Dans le pire des cas, la valeur décimale diffère d'un, ce qui n'est pas visible à l'œil humain. En pratique, si vous n'avez pas assez de place pour stocker toutes vos données dans le premier bit de chaque pixel, vous devez commencer à utiliser le second bit, et ainsi de suite. Il faut garder à l'esprit que plus vous stockez de données dans une image, plus elle peut être détectée.
Le module LSBSteg est basé sur OpenCV pour cacher des données dans des images. Il utilise le premier bit de chaque pixel et de chaque couleur d'une image. Le code est assez simple à comprendre ; si tous les premiers bits ont été utilisés, le module commence à utiliser le second bit, donc plus les données sont volumineuses, plus l'image est altérée. Le programme peut cacher toutes les données s'il y a assez d'espace dans l'image. Les principales fonctions sont :
Seules les images sans compression sont prises en charge, c'est-à-dire pas le JPEG car les bits de poids faible peuvent être altérés pendant la phase de compression.
Cet outil nécessite seulement OpenCV et ses dépendances.
pip install -r requirements.txt
LSBSteg.py
Usage :
LSBSteg.py encode -i <entrée> -o <sortie> -f <fichier>
LSBSteg.py decode -i <entrée> -o <sortie>
Options :
-h, --help Afficher cette aide
--version Afficher la version
-f,--file=<fichier> Fichier à cacher
-i,--in=<entrée> Image d'entrée (support)
-o,--out=<sortie> Image de sortie (ou fichier extrait)
Encodage de texte :
# encodage
steg = LSBSteg(cv2.imread("mon_image.png"))
img_encoded = steg.encode_text("mon message")
cv2.imwrite("ma_nouvelle_image.png", img_encoded)
# décodage
im = cv2.imread("ma_nouvelle_image.png")
steg = LSBSteg(im)
print("Valeur du texte :", steg.decode_text())
Stéganographie d'image :
# encodage
steg = LSBSteg(cv2.imread("support.png"))
new_im = steg.encode_image(cv2.imread("image_secrete.jpg"))
cv2.imwrite("nouvelle_image.png", new_im)
# décodage
steg = LSBSteg("nouvelle_image.png")
orig_im = steg.decode_image()
cv.SaveImage("recuperee.png", orig_im)
Stéganographie binaire :
# encodage
steg = LSBSteg(cv2.imread("support.png"))
data = open("mes_donnees.bin", "rb").read()
new_img = steg.encode_binary(data)
cv2.imwrite("nouvelle_image.png", new_img)
# décodage
steg = LSBSteg(cv2.imread("nouvelle_image.png"))
binary = steg.decode_binary()
with open("recupere.bin", "wb") as f:
f.write(binary)
Ce logiciel est sous licence MIT.