begin process at 2010 02 10 02:47:42
  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é :2 967 / 425

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 ALBUM PHOTOS par ayoube2009
Source avec Zip Source avec une capture EDITEUR D'AUTOMATES CELLULAIRES par PADYVEN
Source avec Zip Source avec une capture PROGRAMME DE DESSIN À LA SOURIS AVEC OUVERTURE ET ENREGISTRE... par SnkVrt
Source avec Zip Source avec une capture Source .NET (Dotnet) PHOTOSEXPRESS - TRAITEMENT DE PHOTOS par zozo14
Source avec Zip Source avec une capture ÉCRIRE SUR LE WALLPAPER par Rafale71

 Sources en rapport avec celle ci

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
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE DE CRYPTAGE RIJNDAEL ET GESTION DE MOTS DE PASSES par XGuarden
Source avec Zip Source avec une capture STEGANOGRAPHIE (CACHER UN FICHIER DANS UNE IMAGE) par max12
Source avec Zip CRYPTAGE XOR EN FONCTION D'UNE CLÉ ET DU CARACTÈRE PRÉCÉDENT par MadM@tt

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,215 sec (3)

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