Stéganographie cryptée avec vigenere

Soyez le premier à donner votre avis sur cette source.

Vue 7 714 fois - Téléchargée 447 fois

Description

Stéganographie cryptée avec Vigénère (VB 2008)

Voici un petit programme sans prétention qui permet de cacher du texte dans une image.

Le fonctionnement :

L'utilisateur entre un texte qu'il veut cacher dans une image, qui est l'image de référence (Ref.bmp).
Ensuite, il choisit une Clef de cryptage unique, servant à crypter ET à décrypter le texte.

S'en suivent plusieurs étapes pour utiliser l'algorithme de Vigénère.
Ensuite, on inscrit un à un les pixels en fonction du code binaire du texte à crypter.
Le code parle de lui-même et explique mieux qu'un long discours ;)

Le programme utilise une image de référence de 8 pixels de haut sur 1000 de large (on inscrit le mot binaire de 8 bits de longueur sur "une rangée" maximale de 1000 mots, donc de 1000 caractères à crypter).
Une fois l'image enregistrée, vous verrez qu'elle est remplie de pixels rouges et blancs. Il faut savoir que les pixels rouge représentent un 1 et les pixels blancs un 0. Vous vous direz : "mais j'ai écrit un texte de 3 caractères, pourquoi l'image entière (de 1000 caractères) est écrite ?". Eh bien tout simplement parce que l'image de base est remplie de pixels "presque rouges" et "presque blancs" (donc invisible à l'oeil nu, mais pas par l'ordi ;)).

Composition de la source :

La source est composée de trois classes :
Une pour le cryptage, une pour le décryptage, et une pour la stéganographie elle-même, donc il est possible de les réutiliser dans des programmes annexes.

NOTE TRES IMPORTANTE : LES ACCENTS NE SONT PAS PRIS EN COMPTE DANS LE TEXTE A CRYPTER.

Source / Exemple :


Toute critique et tout commentaire est le bienvenu..

Conclusion :


J'espère que ce petit programme vous donnera des idées, qu'il vous sera utile et qu'il vous permettra d'en apprendre un peu plus sur le vb.Net. Je veux que vous me critiquez (il faut qu'on me fasse des critiques si je veux me perfectionner), mais tout en restant poli et courtois ;) Les commentaires sont appréciés aussi :p

Vous en pensez quoi du fonctionnement même du programme ?
Le programme est-il bien codé ?
Comment l'améliorer ?
Est ce que ce procédé garantit une bonne sécurité à votre avis ?
Avez-vous des questions ?
Des suggestions ?
Voulez-vous avoir des explications ?

En espérant vous avoir été utile,
Papymuzo/kAm

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Module Graphus
    'Merci Papymuzo.
    'http://codes-sources.commentcamarche.net/source/view/48180/1169569#browser
    Friend PhotoRef As PictureUtil
    Friend CurrentPhoto As PictureUtil

    Function Papymuzodecode() As String
        Dim TaBit As Boolean() = TabChar("")
        Dim S As String = ""
        Dim Pixels As String = ""
        Dim Pixelref As String = ""
        Dim i As Integer = 0
        Do
            For j = 0 To 7
                Pixels = CurrentPhoto.Draw.GetPixel(i, j).ToString
                Pixelref = PhotoRef.Draw.GetPixel(i, j).ToString
                TaBit(j) = Nothing
                Select Case Pixels
                    Case "Color [A=255, R=255, G=255, B=255]"
                        TaBit(j) = False
                    Case "Color [A=255, R=255, G=0, B=0]"
                        TaBit(j) = True
                End Select
            Next
            i = i + 1
            S = S & BinaryToChar(TaBit)
        Loop Until Pixels = Pixelref
        Return S
    End Function

    Sub Papymuzocode(S As String)
        Dim TaBit As Boolean()
        For i = 0 To S.Length - 1
            TaBit = TabChar(S(i))
            ' Dim C As Char = BinaryToChar(TaBit)
            For j = 0 To 7
                Select Case TaBit(j)
                    Case 0
                        CurrentPhoto.Draw.SetPixel(i, j, Color.White)
                    Case 1
                        CurrentPhoto.Draw.SetPixel(i, j, Color.Red)
                End Select
            Next
        Next
        CurrentPhoto.Picture.Image = CurrentPhoto.Draw
    End Sub

    Private Function BinaryToChar(TaBit() As Boolean) As Char
        Dim N As Integer = 0
        For i = 0 To 7
            If TaBit(i) = True Then
                N += 2 ^ i
            End If
        Next
        Return Chr(N)
    End Function
    Private Function TabChar(ByVal C As Char) As Boolean()
        Dim v As Integer = Asc(C)
        Dim TabBits(7) As Boolean

        For p = 7 To 1 Step -1
            If 2 ^ p > v Then
                TabBits(p) = False
            Else
                v -= 2 ^ p
                TabBits(p) = True
            End If
        Next
        If v = 1 Then TabBits(0) = True Else TabBits(0) = False
        Return TabBits
    End Function

    Friend Sub initGraph(Pref As PictureBox, P As PictureBox)
        PhotoRef = New PictureUtil(Pref)
        PhotoRef.Draw = Image.FromFile(Application.StartupPath & "\Donkey.jpg")
        PhotoRef.Picture.Image = PhotoRef.Draw
        CurrentPhoto = New PictureUtil(P)
        CurrentPhoto.Draw = PhotoRef.Draw.Clone
        CurrentPhoto.Picture.Image = CurrentPhoto.Draw
    End Sub
End Module
cs_Papymuzo
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
Ah mais je viens de comprendre !

En fait pour moi, 2 mod 10 était le reste de la division de 10 par 2, donc 0.
Alors que 10 mod 2 = 2.

Autant pour moi ^^
Du coup je comprends comment sa marche !!! ^^
NHenry
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
Non, c'est le reste de la division.
Quand tu fais une division à la mais (sans les virgules), il te reste parfois un nombre :
25/10=2*10+5, donc il te reste 5.
Ou sous un autre format :
25|10
-20|2
5

25 mod 10=5
Je ne vois pas comment faire plus simple.
cs_Papymuzo
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
Tu vas me trouver un peu neuneu mais si 5 mod 10 = 5, alors 2 mod 10 = 8 ?

Je croyais que 5 mod 10 0 (car 10 2 * 5), et que 2 mod 10 = 0 (car 10 = 5 * 2). Par exemple on aurait 2 mod 11 = 1 (car 11 = 2 * 5 +1).
NHenry
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
Mod, c'est le reste de la division :
5 mod 10=5
2 mod 10=2
0 mod 10=0
10 mod 10=0

Variant n'existe pas en .NET, c'est Object (juste pour rappel).

For i as integer=0 to 10
=
dim i as integer
for i=0 to 10

Voilà.

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.