IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Stéganographie en RVBA


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2017
    Messages : 1
    Par défaut Stéganographie en RVBA
    Bonjour, avec mon ami nous devons faire un programme de stéganographie mais nous somme bloqué l'image en sortie n'est pas codé et affiche une bande blanche sur le côté gauche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    from PIL import Image
    from PIL import Image
    import os
    os.chdir("F:\Programme Python")
     
     
    c="Il faut blanchir les champignons! Ou un truc comme ça... dans le genre moisi, quoi"
    #on note la longueur de la chaine et on la transforme en binaire
    u=len(c)
    v=bin(len(c))[2:].rjust(8,"0")
    #on transforme la chaine en une liste de 0 et de 1 
    ascii=[bin(ord(x))[2:].rjust(8,"0") for x in c]
    #transformation de la liste en chaine
    a=''.join(ascii)
    a = str(a)
    print (a)
    tba = list(a)
    # Je charge l'image a traiter
    monImage = Image.open('coupable.png')
     
    # Je prend en compte son canal alpha, le pixel contient alors 4 valeurs : RGBA
    monImage = monImage.convert ("RGBA")
     
    # Je demande la taille de cette image, sa largeur et sa hauteur.
    largeur, hauteur = monImage.size
     
    # Creation de la nouvelle image vierge aux meme dimensions que l'image de depart
    imageFinale = Image.new('RGBA', (largeur, hauteur), 'white');
     
    # Je demande la matrice de pixels de l'image originale a steganographier
    pixelsOrigine = monImage.load()
     
    # Je demande la matrice de pixels de l'image destination qui sera steganographiee
    pixels = imageFinale.load()
     
     
    for colonne in range(largeur):
     
        # pour chaque ligne d'une colonne choisie sur toute la hauteur
        for ligne in range(hauteur):
     
            # prendre connaissance des composantes rvba d'un pixel de l'image originale
            r, v, b, alpha = monImage.getpixel((colonne,ligne))
     
            # par defaut, j'affecte les valeurs rvba aux pixels de l'image
            # a steganographier. Ces valeurs n'ont pas encore ete modifiees.
            rS = r
            vS = v
            bS = b
            alphaS = alpha
            #Simple traduction en binaire pour ensuite modifier les deux derniers bits
            rB, vB, bB, alphaB = bin(rS)[2:].rjust(8,"0"), bin(vS)[2:].rjust(8,"0"), bin(bS)[2:].rjust(8,"0"), bin(alphaS)[2:].rjust(8,"0")
            #On met sous forme de liste pour pouvoir modifier les deux derniers bits
            tbr, tbv, tbb, tbalpha = list(rB), list(vB), list(bB), list(alphaB)
            #Ici on supprime les deux dernier bits de chaque liste
            tbr.pop(6), tbr.pop(6), tbv.pop(6), tbv.pop(6), tbb.pop(6), tbb.pop(6), tbalpha.pop(6), tbalpha.pop(6)
     
            if len(tba)>0 :
                #On ajoute à la fin de la liste les deux premiers chiffre de notre mot traduit en binaire
                tbr.append(tba[0])
                tbr.append(tba[1])
                tbv.append(tba[2])
                tbv.append(tba[3])
                tbb.append(tba[4])
                tbb.append(tba[5])
                tbalpha.append(tba[6])
                tbalpha.append(tba[7])
                #On supprime les huits premiers chiffres de notre mot traduit en binaire 
                tba.pop(7), tba.pop(6), tba.pop(5), tba.pop(4), tba.pop(3), tba.pop(2), tba.pop(1), tba.pop(0)
     
                rS, vS, bS, alphaS = [int(tbr) for tbr in tbr] ,[int(tbv) for tbv in tbv], [int(tbb) for tbb in tbb] ,[int(tbalpha) for tbalpha in tbalpha]
                #Ça c'est pour transformer les listes en strings puis en entier
                r = int("".join(tbr))
                v= int("".join(tbv))
                b = int("".join(tbb))
                alpha = int("".join(tbalpha))
                #Et ça ça sert a mettre dans le pixel de rang [colonne,ligne] les nouvelles 
                #valeurs de rgba mais apparemment ça  marche pas puisque ça mets tout en blanc
                pixels[colonne, ligne] = (r, v, b, alpha)
    print(r,v,b,alpha)
    imageFinale.save('imageStegano.png', 'PNG')
    Edit : Ajout de commentaire dans le code

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Relisez votre code: vous créez une image "blanche" qui ne sont remplacés tant que tba n'est pas vide: i.e. les premiers points. Si vous voulez remplacer les autres points par la valeur originale, c'est peut être simplement une question d'indentation de l'instruction ligne 69.

    Pour le reste, l'encodage que vous essayez de faire mériterait d'être décrit car pas facile de comprendre ce que vous essayez de faire en lisant le code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Stéganographie, bitmap et offset
    Par Heisen dans le forum C
    Réponses: 8
    Dernier message: 31/10/2011, 00h14
  2. Réponses: 9
    Dernier message: 14/05/2008, 10h19
  3. Stéganographie de deux images
    Par ironzorg dans le forum SDL
    Réponses: 10
    Dernier message: 03/07/2007, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo