Steganographie

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 427 fois - Téléchargée 17 fois

Contenu du snippet

Simple programme en mode console pour cacher du texte dans une image .bmp .
Avec le module PIL , pardonner le manque de commentaire

Source / Exemple :


#!/usr/bin/python
# -*- coding: iso8859-1 -*-

from Image import open,new
from sys import argv,exit
from os import access,F_OK
from string import split

def ConstrcutRGB(pixelR,pixelG,pixelB,lenP):
	i = 0
	pixel = []
	while ( i < lenP ):
		pixel.append((pixelR[i],pixelG[i],pixelB[i])) # (( )) Car on  fait une liste de tuple
		i += 1
	print ("[*] Rassemble RGB -> liste -> tuple : ok .")
	return pixel

def ConverCharInt():
	txt = raw_input("Texte -> ")
	txt += "FiNiEnD"
	chiffreTexte,i = [],0
	decimal = []
	while ( i < len(txt) ):
		chiffreTexte.append(ord(txt[i])+100)
		i += 1
	i = 0
	i2 = 0
	while ( i < len(chiffreTexte) ) :
		i2 = 0
		buff = str(chiffreTexte[i])
		while ( i2 < len(buff) ):
			decimal.append(buff[i2])
			i2 += 1
		i += 1
	return decimal

def ModifValeurPixel(pixel,valeur):
	if ( pixel > 245 ):
			pixel[i] = 244
	buff = str(pixel)
	buff = buff[:len(buff)-1]
	buff = buff+str(valeur)
	pixel = buff
	return pixel

def CacheTexte(pixelR,pixelG,pixelB,decimal,lenPixel,size,newImg):
	i=0
	i_d=0
	while ( i < lenPixel ):
		pixelR[i] = ModifValeurPixel(pixelR[i],decimal[i_d])
		i_d += 1
		if ( i_d == len(decimal) ):
			break
		pixelG[i] = ModifValeurPixel(pixelG[i],decimal[i_d])
		i_d += 1
		if ( i_d == len(decimal) ):
			break
		pixelB[i] = ModifValeurPixel(pixelB[i],decimal[i_d])
		i_d += 1
		if ( i_d == len(decimal) ):
			break
		i += 1
	print("[*] Modifie valeur : ok ")
	i = 0
	while ( i < lenPixel ):
		pixelR[i] = int(pixelR[i])
		pixelG[i] = int(pixelG[i])
		pixelB[i] = int(pixelB[i])
		i += 1

	newImage = new('RGB',size)
	newImage.putdata(ConstrcutRGB(pixelR,pixelG,pixelB,lenPixel))
	newImage.save(newImg)
	print ("[*] Image <%s> cree : ok "%(newImg))

def RetrouveValeur(pixel):
	buff = pixel[len(pixel)-1:]
	return buff

def TrouveTexte(pixelR,pixelG,pixelB,lenPixel):
	decimal = ""
	i = 0
	while ( i < lenPixel ):
		decimal += RetrouveValeur(str(pixelR[i]))
		decimal += RetrouveValeur(str(pixelG[i]))
		decimal += RetrouveValeur(str(pixelB[i]))
		i += 1
	print ("[*] Decoupe valeur : ok .")
	decimal = str(decimal)
	i,compt = 0,0
	bheu = ""
	chiffreTxt = []
	while ( i < len(decimal) ):
			if ( compt == 3 ):
				chiffreTxt.append(bheu)
				bheu = ""
				compt = 0
			bheu += decimal[i]
			i += 1
			compt += 1	
	i=0
	txt = ""
	while ( i < len(chiffreTxt) ):
		chiffre = int(chiffreTxt[i])
		chiffre = chiffre - 100
		txt += chr(chiffre)
		if ( "FiNiEnD" in txt ):
			break
		i += 1
	print ("Message -> %s"%(txt[:len(txt)-7]))

def Acceuil():
	print """ 
	coder par Marnage
	Programme de steganogrphie ( lib : PIL )
	Cacher du texte dans une image (.bmp)
	
	Argument :
		-cache = pour cacher du texte dans une nouvelle image
		-i nomimage.bmp = l image de base ou sera cacher le texte
		-n newimage.bmp = la nouvelle image qui sera cree avec le texte
		
		-trouve = pour retrouver le texte
		-i = image dans la qu elle chercher le texte
	
	"""

def main(arg):
	Acceuil()
	if ( len(arg) != 3 and len(arg) != 5 ):
		print ("[!] Erreur : argument !")
		exit()
	i = 0
	while ( i < len(arg) ):
		if ( arg[i] == "cache" ):
			mode = "cache"
		elif ( arg[i] == "trouve"):
			mode = "trouve"
		elif ( arg[i] == "-i" ):
			nomImage = arg[i+1]
		elif ( arg[i] == "-n" ):
			NI = arg[i+1]
		i += 1
	if ( mode != "cache" and mode != "trouve" ):
		print ("[!] Erreur : argument !")
		exit()
	if not ".bmp" in nomImage :
		print("[!] Erreur : extention image non .bmp !")
		exit()

	if ( mode == "cache") :
		decimal = ConverCharInt()

	if ( access(nomImage, F_OK) ):
		image = open(nomImage)
		size = image.size
		print ("[*] Access/Ouverture image : ok .")
	else :
		print ("[!] Erreur : image innaccesible ! ")
		exit()
	pixelColor = list(image.getdata())
	lenPixel = len(pixelColor)
	i = 0
	pixelR = []
	pixelG = []
	pixelB = []
	lenPixel = len(pixelColor)
	size = image.size

	while ( i < lenPixel ):
		iP = 0
		pixelRGB = pixelColor[i]
		while ( iP < 3 ):
			if ( iP == 0 ):
				pixelR.append(pixelRGB[iP])
			elif ( iP == 1 ):
				pixelG.append(pixelRGB[iP])
			elif ( iP == 2 ):
				pixelB.append(pixelRGB[iP])
			iP += 1
		i += 1
	print ("[*] Separe RGB liste : ok .")
	
	if ( mode == "cache" ):
		CacheTexte(pixelR,pixelG,pixelB,decimal,lenPixel,size,NI)
	
	elif ( mode == "trouve" ):
		TrouveTexte(pixelR,pixelG,pixelB,lenPixel)

if ( __name__ == "__main__" ):
	main(argv[1:])

Conclusion :


... .

A voir également

Ajouter un commentaire

Commentaire

slyder90
Messages postés
1
Date d'inscription
mercredi 1 novembre 2017
Statut
Membre
Dernière intervention
1 novembre 2017
-
bonjour comment lancer votre programme et puis je avoir plus dinformation sur chaque ligne du code ??
cordialement

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.