Stéganographie - Python

Fermé
Telnaz - 27 nov. 2021 à 14:41
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 28 nov. 2021 à 11:28
Bonjour,

Je suis débutant en algorithmie, depuis septembre dernier.
Je suis actuellement en école d'ingénieurs, où mes premiers cours furent sur de la programmation impérative et de la programmation avec python.

Je suis en train d'étudier en TP, dans lequel j'ai pas mal avancé, mais la dernière partie me bloque beaucoup.

Cela concerne la stéganographie. Je dois écrire un programme qui charge une image de taille suffisante dans une matrice de pixels et "cache" les caractères d'une chaîne de caractères (de moins de 50 caractères) .

Les programmes que j'ai fais précédemment furent moins complexes, j'ai donc facilement trouvé l'approche et donc l'algorithme a utilisé.

Ici, je ne sais pas par quoi démarrer.

A noter que je ne dois pas utiliser des fonctions toutes faites, hormis quelques exceptions telles que la taille d'une image (hauteur, largeur) et l'écriture d'une image.

Est-il possible d'avoir de l'aide ? Notamment sur l'algorithme que je pourrais utiliser pour démarrer ma réflexion sur le problème.

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
27 nov. 2021 à 16:21
bonjour,
as-tu essayé de faire une recherche sur internet, à partir de "stéganographie"?
0
Oui, je commence à avoir un peu d'idée pour mon programme. J'ai d'ailleurs commencé quelques lignes de codes, notamment pour tester la convertion chaîne/binaire ou décimal/binaire.

Voici le code :

def Steganographie(texte="S"):

    Image1 = Image.read_img("TUX.png")
    #on recupere les dimensions de l'image :
    hauteur = Image.get_height(Image1)
    largeur = Image.get_width(Image1)

    #on separe l'image en trois couleurs : rouge, vert et bleu :

    # Parcours des colonnes de la matrice
    for j in range (hauteur):
        #Parcours des lignes de la matrice
        for i in range(largeur):
            RED = Image1[i][j][0]
            GREEN = Image1[i][j][1]
            BLUE = Image1[i][j][2]

    #on trasnforme la partie rouge en liste

    liste_rouge = list(RED)

    # on calcul la longueur de la chaîne et la transforme en binaire
    longueur_texte = len(texte)
    binaire_texte = bin(longueur_texte)[2:].rjust(8,"0")

    #on transforme la chaîne en une liste de 0 et de 1
    for x in texte:
        ascii = bin(ord(x))[2:].rjust(8,"0")


Steganographie()


C'est un morceau de code, donc non compilé.

Ensuite, il faut que je remplace les 0 et 1 dans les pixels rouges par exemple, mais pour l'instant je ne vois pas trop comment faire.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Telnaz
27 nov. 2021 à 18:00
Donne quelques exemples de ce que tu penses faire avec les pixels rouges.
0
Telnaz > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
27 nov. 2021 à 18:21
Les pixels rouges sont codés en binaire par 11111011. Je me suis donc dis que je pourrais remplacer les 3 bits de poids faibles (011) par les 3 bits de poids fort du texte envoyé et converti en binaire. Qu'en pensez-vous ?
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Telnaz
27 nov. 2021 à 19:47
cela vaut la peine de tester cela, je pense.
0
Telnaz > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
27 nov. 2021 à 19:51
Par contre, je ne vois pas du tout comment récupérer et modifier ces pixels.
0