begin process at 2012 02 12 15:05:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > CACHER MOT DE PASSE DANS BITMAP - STEGANOGRAPHIE

CACHER MOT DE PASSE DANS BITMAP - STEGANOGRAPHIE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :cryptage, bitmap bmp, password, steganographie, xor Niveau :Débutant Date de création :29/12/2008 Date de mise à jour :30/12/2008 12:10:14 Vu / téléchargé :4 117 / 543

Auteur : ym_trainz

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,

J'ai cherché à cacher un mot de passe sans que cela ne se voit trop.
Je ne voulais pas utiliser la base de registre mais un lieu tellement évident qu'on ne le soupçonne pas : dans une image.

Avec l'exemple fourni (l'image test-source est dans un fichier .res), on ne voit pas trop le mot de passe une fois inséré dans l'image. On peut bien sûr modifier tous les paramètres et la clé de cryptage Xor utilisée pour le cryptage du mot de passe (dans le fichier .res également)

Le mot de passe n'est pas inséré en fin de fichier mais dans l'image :

Pour l'exemple, j'utilise un bitmap (obligatoirement 24 bits) et je code à la ligne 3, du 3ème au 46ème pixel à l'aide du paramètre RGB bleu. Du coup, je peux coder une chaîne de 43 caractères sur cette ligne. Je pense que ce n'est pas trop visible.

Merci à Steff : http://www.vbfrance.com/code.aspx?ID=16929 qui a largement inspiré mon code.

Cordialement, ym_trainz

Source

  • 'In the zip
  • '2 versions du projet :
  • 'une avec tracé des images (capture)
  • 'l'autre sans tracé mais sous forme d'un module, plus facilement insérable dans un projet :
  • Public Function MpassToBmp(PassWord As String, BmpFilePathSource As String, _
  • BmpFilePathDest As String, KeyEncrypt As String, ToWrite As Boolean, _
  • LineToInsert As Integer, FirstColPix As Integer, LastColPix As Integer) As Boolean
  • '-------------------------------
  • 'la fonction à appeler
  • 'ym_trainz 2008
  • '-------------------------------
  • 'paramètres :
  • '
  • 'PassWord : mot caché (à lire ou à écrire dans l'image
  • ' la longueur du mot maxi est LastColPix - FirstColPix (car 1 caractère réservé pour la longueur du mot)
  • ' Limite 254 caractères quand même, à cause de Dim TabMo() As Byte (tableau des caractères)
  • 'BmpFilePathSource : chemin de l'image bitMpas 24bit source
  • 'BmpFilePathDest : chemin de l'image bitMpas 24bit destination
  • ' (n'est utile que si on écrit le mot caché, laisser vide pour une lecture)
  • 'KeyEncrypt : clé de crytage Xor pour coder le mot à cacher
  • 'ToWrite : True pour écrire , False pour lire
  • 'LineToInsert : indice de la ligne où se situe le mot à lire ou à écrire (1 à InfoHeader.Height)
  • 'FirstColPix et LastColPix : premier et dernier pixel (colonne) pour le champ du mot à écrire ou à lire
  • ' (LastColPix - FirstColPix)<=254
'In the zip

'2 versions du projet :
'une avec tracé des images (capture)

'l'autre sans tracé mais sous forme d'un module, plus facilement insérable dans un projet :

Public Function MpassToBmp(PassWord As String, BmpFilePathSource As String, _
        BmpFilePathDest As String, KeyEncrypt As String, ToWrite As Boolean, _
        LineToInsert As Integer, FirstColPix As Integer, LastColPix As Integer) As Boolean
    '-------------------------------
    'la fonction à appeler
    'ym_trainz 2008
    '-------------------------------
    'paramètres :
    '
    'PassWord : mot caché (à lire ou à écrire dans l'image
    '           la longueur du mot maxi est LastColPix - FirstColPix (car 1 caractère réservé pour la longueur du mot)
    '           Limite 254 caractères quand même, à cause de Dim TabMo() As Byte (tableau des caractères)
    'BmpFilePathSource : chemin de l'image bitMpas 24bit source
    'BmpFilePathDest : chemin de l'image bitMpas 24bit destination
    '                  (n'est utile que si on écrit le mot caché, laisser vide pour une lecture)
    'KeyEncrypt : clé de crytage Xor pour coder le mot à cacher
    'ToWrite : True pour écrire , False pour lire
    'LineToInsert : indice de la ligne où se situe le mot à lire ou à écrire (1 à InfoHeader.Height)
    'FirstColPix et  LastColPix : premier et dernier pixel (colonne) pour le champ du mot à écrire ou à lire
    '                           (LastColPix - FirstColPix)<=254

 Conclusion

Il existe déjà des sources sur le sujet mais je pense que le mot de passe est plutôt bien camouflé ;-)
L'image test est automatiquement crée au démarrage (form_load) Elle se régénère donc automatiquement.

La version module permettra une utilisation plus simple à l'aide d'une seule fonction MpassToBmp()

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 décembre 2008 00:19:04 :
Ajout d'une version sous forme d'un module, la fonction à appeler : MpassToBmp(motDePasse, SourceFile, outFile, keyChrypt, WriteOuRead) as boolean
30 décembre 2008 00:39:07 :
Correction orthographique suite au commentaire de Renfield
30 décembre 2008 11:50:32 :
Ajout de paramètres dans MpassToBmp() Suppression de lignes inutiles
30 décembre 2008 12:10:14 :
Correction d'un petit bug sur le CommonDialog1

 Sources du même auteur

Source avec Zip Source avec une capture YMTOOLS - AGENDA - BACKUP ET AUTRES OUTILS
Source avec Zip Source avec une capture [VB6] YMXPLORER : DOUBLE EXPLORATEUR DE FICHIERS
Source avec Zip Source avec une capture REPLACE IN FILE - REMPLACEMENTS MULTIPLES DES FICHIERS D'UN ...
Source avec Zip Source avec une capture YMDOWNLOADER
Source avec Zip Source avec une capture YM-LIGHT-WORDPAD TABLEAU IMAGES ET SURLIGNAGE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN GIF ANIMÉ par Le Pivert
Source avec une capture GRAPH PHP COURBE DE CHARGE par s.defaye
Source avec Zip Source avec une capture BOULE DE CRISTAL par BLUEBIBUBBLE
VB6 - DÉPLACEMENT D'UN CONTRÔLE SUR UN SEGMENT DE DROITE DÉL... par ucfoutu
Source avec Zip Source .NET (Dotnet) APPLICATION DE DESSIN par fsafsafsaf

 Sources en rapport avec celle ci

Source avec Zip ACCÈS PAR MOT DE PASSE À FEUILLE EXCEL par mimiZanzan
Source avec Zip Source avec une capture FOLDER PROTECTION par hackoo
LOGICIEL DE CRYPTAGE UTILISANT L'OPÉRATION XOR ET LA TABLE A... par jejedelajungle
Source avec Zip Source avec une capture Source .NET (Dotnet) ENCRYPTEUR (UTILISATION DU XOR) par mohman
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES DROITS D'ACCÈS À VOTRE APPLICATION PAR MOT DE PA... par XGuarden

Commentaires et avis

Commentaire de Renfield le 29/12/2008 22:03:30 administrateur CS

pas de 'h' dans crypter

on parle de "steganographie"

Commentaire de ym_trainz le 30/12/2008 00:22:56

Oups... Désolé Rey !
Je corrige.
Cela fera une version 3 puisque je viens d'UL une version avec module.

Cordialement,
ym_trainz

Commentaire de PWM63 le 05/01/2009 11:11:33 8/10

Quitte à faire du watermarking, ne pas utiliser xor comme système de cryptage, ce n'est pas très sécurisé.

Si tu gardes l'original et la copie modifiée, il est également possible de dispatcher chaque pixel modifié dans l'image, quelle que soit sa taille. Et pour que ce soit encore moins visible, il est possible de modifier le pixel en gardant le même ton de couleur.

'Modifie la couleur du pixel en gardant le plus possible le même ton
'ex :
'couleur source = 70,10,50
'code caractère = 61
'la couleur cryptée deviendra 90,30,71

Commentaire de ym_trainz le 06/01/2009 22:20:55

Merci PWM 63 !

Bon, là, d'accord, on entre vraiment dans le détail.
As-tu l'algo qui va bien pour ta modif RGB ?

Pour le Xor, il faut déjà avoir la clé de cryptage, mais bon, si tu as encore mieux...

Cordialement,
ym_trainz

Commentaire de PWM63 le 07/01/2009 11:06:18

Bonjour ym_trainz,

Oui, j'ai l'algo. Mais comme c'est du code qui n'était pas prévu pour être posté, il n'y a pas de commentaire (juste à 1 endroit)

Mais les contrôles et variables sont explicitement nommées.

Bon courage tout de même ! :)

Pour la clef Xor, rien de plus facile de la trouver ! C'est déconcertant tellement c'est facile ! Cherche plutôt du côté de Rijndael, il n'y a pas mieux.

Algo pour marquer :

    Dim w, h, x, y As Integer

    Private Sub Button_Marquer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Marquer.Click

        marque()

    End Sub

    Function marque() As Boolean

        If Me.TextBox_PathImageSource.Text > "" And _
           Me.TextBox_PathImageMarquée.Text > "" And _
           Me.TextBox_PathImageSource.Text <> Me.TextBox_PathImageMarquée.Text And _
           Me.TextBox_Pass1.BackColor = Color.Green And _
           Me.TextBox_Pass2.BackColor = Color.Green And _
           Me.TextBox_ConfirmPass1.BackColor = Color.Green And _
           Me.TextBox_ConfirmPass2.BackColor = Color.Green And _
           Me.TextBox_Texte_clair.Text > "" Then

            Dim img As Bitmap = Me.PictureBox_ImageSource.Image.Clone
            Dim nb_pxl, pas As Integer
            Dim txt_clair As String = Me.TextBox_Texte_clair.Text
            Dim pass1 As String = Me.TextBox_Pass1.Text
            Dim pass2 As String = Me.TextBox_Pass2.Text
            Dim cryptage As New Rijndael(pass1, pass2)
            Dim txt_crypté As String = cryptage.EncryptText(txt_clair)
            Dim r, g, b, gris_rg, gris_b As Integer
            Dim r2, g2, b2 As Byte

            Me.TextBox_Texte_crypté.Text = txt_crypté

            w = img.Width
            h = img.Height
            nb_pxl = w * h
            x = 0
            y = 0

            If nb_pxl > txt_crypté.Length + 1 + txt_crypté.Length.ToString.Length + 1 Then

                img.SetPixel(x, y, Color.FromArgb(Asc("w"), Asc("m"), Asc("k")))

                For i = 0 To txt_crypté.Length.ToString.Length - 1

                    xy(1)
                    img.SetPixel(x, y, Color.FromArgb(img.GetPixel(x, y).R, Asc(txt_crypté.Length.ToString.Substring(i, 1)), img.GetPixel(x, y).B))

                Next

                xy(1)
                img.SetPixel(x, y, Color.FromArgb(Asc("w"), Asc("m"), Asc("k")))

                pas = Math.Truncate((nb_pxl - x - ((y + 1) * w)) / (txt_crypté.Length + 9))

                If pas = 0 Then Return False

                For i = 0 To txt_crypté.Length - 1

                    xy(pas)

                    'Modifie la couleur du pixel en gardant le plus possible le même ton
                    'ex :
                    'couleur source = 70,10,50
                    'code caractère = 61
                    'la couleur cryptée deviendra 90,30,71

                    r = img.GetPixel(x, y).R
                    g = img.GetPixel(x, y).G
                    b = img.GetPixel(x, y).B

                    gris_rg = Asc(txt_crypté.Substring(i, 1)) / 3
                    gris_b = Asc(txt_crypté.Substring(i, 1)) - (2 * gris_rg)

                    If r + gris_rg <= 255 Then
                        r2 = r + gris_rg

                    Else
                        r2 = r - gris_rg

                    End If

                    If r + gris_rg <= 255 Then

                        If g + gris_rg <= 255 Then
                            g2 = g + gris_rg

                        Else
                            g2 = g - gris_rg

                        End If

                    Else

                        If g - gris_rg >= 0 Then
                            g2 = g - gris_rg

                        Else
                            g2 = g + gris_rg

                        End If

                    End If

                    If r + gris_rg <= 255 And g + gris_rg <= 255 Then

                        If b + gris_b <= 255 Then
                            b2 = b + gris_b

                        Else
                            b2 = b - gris_b

                        End If

                    ElseIf r - gris_rg >= 0 And g - gris_rg >= 0 Then

                        If b - gris_b >= 0 Then
                            b2 = b - gris_b

                        Else
                            b2 = b + gris_b

                        End If

                    Else

                        If b + gris_b <= 255 Then
                            b2 = b + gris_b

                        Else
                            b2 = b - gris_b

                        End If

                    End If

                    img.SetPixel(x, y, Color.FromArgb(r2, g2, b2))

                Next

                Me.PictureBox_ImageMarquée.Image = img

                Return True

            End If

        End If

        Return False

    End Function

    Sub xy(ByVal pas As Integer)

        x += pas

        While x >= w

            x -= w
            y += 1

        End While

    End Sub

Et pour démarquer (autre form) :

    Dim w_source, h_source, w_marquée, h_marquée, x, y As Integer

    Private Sub Button_Démarquer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Démarquer.Click

        démarque()

    End Sub

    Function démarque() As Boolean

        If Me.TextBox_PathImageSource.Text > "" And _
           Me.TextBox_PathImageMarquée.Text > "" And _
           Me.TextBox_PathImageSource.Text <> Me.TextBox_PathImageMarquée.Text And _
           Me.TextBox_Pass1.Text > "" And _
           Me.TextBox_Pass2.Text > "" And _
           Me.TextBox_Pass1.Text <> Me.TextBox_Pass2.Text Then

            Dim img_source As Bitmap = Me.PictureBox_ImageSource.Image.Clone
            Dim img_marquée As Bitmap = Me.PictureBox_ImageMarquée.Image.Clone
            Dim nb_pxl, pas As Integer
            Dim pass1 As String = Me.TextBox_Pass1.Text
            Dim pass2 As String = Me.TextBox_Pass2.Text
            Dim cryptage As New Rijndael(pass1, pass2)
            Dim txt_crypté As String = ""
            Dim r, g, b, r2, g2, b2 As Byte
            Dim couleur As Color
            Dim txt_len As Integer = 0
            Dim val As Byte

            w_source = img_source.Width
            h_source = img_source.Height
            w_marquée = img_marquée.Width
            h_marquée = img_marquée.Height
            nb_pxl = w_marquée * h_marquée
            x = 0
            y = 0

            If w_source <> w_marquée Or h_source <> h_marquée Then Return False

            If img_marquée.GetPixel(x, y) <> Color.FromArgb(Asc("w"), Asc("m"), Asc("k")) Then Return False

            xy(1)
            couleur = img_marquée.GetPixel(x, y)

            While couleur <> Color.FromArgb(Asc("w"), Asc("m"), Asc("k"))

                If Not IsNumeric(Chr(couleur.G)) Then Return False

                val = Conversion.Val(Chr(couleur.G))
                txt_len *= 10
                txt_len += val
                xy(1)
                couleur = img_marquée.GetPixel(x, y)

            End While

            xy(1)
            pas = Math.Truncate((nb_pxl - x - ((y + 1) * w_marquée)) / (txt_len + 9))

            If pas = 0 Then Return False

            For i = 0 To txt_len - 1

                xy(pas)
                r = img_source.GetPixel(x, y).R
                g = img_source.GetPixel(x, y).G
                b = img_source.GetPixel(x, y).B
                r2 = img_marquée.GetPixel(x, y).R
                g2 = img_marquée.GetPixel(x, y).G
                b2 = img_marquée.GetPixel(x, y).B
                val = Math.Abs(r - r2) + Math.Abs(g - g2) + Math.Abs(b - b2)
                txt_crypté &= Chr(val)

            Next

            Me.TextBox_Texte_crypté.Text = txt_crypté

            Try
                Me.TextBox_Texte_crypté.Text = cryptage.DecryptText(txt_crypté)

            Catch ex As Exception
                Return False

            End Try

            Return True

        End If

        Return False

    End Function

    Sub xy(ByVal pas As Integer)

        x += pas

        While x >= w_marquée

            x -= w_marquée
            y += 1

        End While

    End Sub

Commentaire de ym_trainz le 08/01/2009 19:43:52

Bonsoir PWM63

Je te remercie beaucoup pour ce code que j'essaierai d'intégrer dans le projet.
Je me pencherai également sur le codage Rijndael.
Pour l'heure, je n'ai pas trop le temps de travailler sur ce projet mais dès que j'aurai un peu temps, je m'y mettrai ;-)

Encore tous mes remerciements,

Cordialement,
ym_trainz

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

protéger un email avec password ou cryptage ???????? [ par julian ] Je m'explique.....J'envoi un text RTF d'un PC en email et je le reçoit sur MAC.Je voudrai que l'email soit, ou protéger par un password pour pouvoir l CRYPTAGE PAR XOR [ par tekila_bandita ] Je suis en train d'ESSAYER de cr&#233;er un petit prog de cryptage de fichier au niveau binaire par xor, mais je rencontre quelque probleme, voicila p Gestion d'imprimantes... [ par croftman ] Bonjour!Voila, j'ai un projet VB6 qui déssine un plan, et je voudrai imprimer ce plan, donc déjà :- Comment imprimer juste le contenu de la form ou de password avec un inputbox [ par dolnar ] Salut tout le monde, j'aimerai savoir comment réaliser un interface password: demandant votre mot de passe(dolnar) par exemple au traver d'un inputbox outil steganographie [ par khalilcapo ] bjrje suis debutant en vb6 et j'ai besoin d un code qui permet de cacher un texte dans une imagemerci pour toute aide Cryptage 128, 256 ????? [ par hippo92210b ] Bonjours, Il u a quelque jour, je me suis intéresser de prés au cryptage et j'ai donc pris une source de cryptage RC4et je voudrai que le texte soi c communication cryptage protocol et autres [ par codewarx ] Bonjour a tous je recherche des informations pour confectionner un multi scanner utilisant tous mes moyens de comunications en meme temps et qui poura Problème Cryptage Vigénère [ par Redman31100 ] Bonjour à tous !J'ai commencé à faire seulement le code de cryptage Vigénère.Voici le code : Public Shared Function Cryptage(ByVal TextClair As String cryptage [ par achills ] svp j'ai une autre question: je crypte mes données (text1.text) puis je les enregistre dans un fichier text et je les charge au démarrage du forum,le cryptage application (vb6 utilisant liste et fichier texte [ par bayrem2 ] salut,je suis debutant en informatique , je une application vb que je la termine, je suis demandé de la crypte , mais je sais pas que çc veut dire cry


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,012 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales