begin process at 2012 02 11 17:54:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CRYPTAGE PAR LA MÉTHODE DE VIGENERE

CRYPTAGE PAR LA MÉTHODE DE VIGENERE


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Source .NET ( DotNet ) Classé sous :cryptage, vigenere Niveau :Débutant Date de création :09/08/2004 Date de mise à jour :10/08/2004 13:41:11 Vu :22 925

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

J'ai trouvé sur le net, une méthode de cryptage : Le chiffre de Vigenere --> http://www.bibmath.net/crypto/poly/vigenere.php3

C'est à partir de cette page que j'ai concu cette classe. J'ai entendu le codage aux 65536 caractères existant, le tableau de Vigenere ne fait donc plus 26*26 mais 65536*65536 =2^32

Merci à SimonKari.

J'ai laissé l'ancienne version qui ressemble un peu plus au carré de Vigenere

Source

  • #region Using directives
  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • #endregion
  • namespace ConsoleApplication1
  • {
  • class Program
  • {
  • static void Main(string[] args)
  • {
  • string sKey = "Ceci est la chaîne clé";
  • string sValue = "Voici le texte à encoder avec quelques caractères pénibles // !=] %ù ô i () \" ";
  • Vigenere oVigenere = new Vigenere(sKey);
  • Console.WriteLine(sValue);
  • Console.WriteLine("donne une fois code : ");
  • DateTime dDateDeb = DateTime.Now;
  • Console.WriteLine(oVigenere.Encrypt(sValue));
  • Console.WriteLine("L'encryptage a duré : " + (DateTime.Now.Subtract(dDateDeb).Ticks / 10000) + " ms");
  • Console.ReadLine();
  • Console.WriteLine("Verification : ");
  • Console.WriteLine(oVigenere.Decrypt(oVigenere.Encrypt(sValue)));
  • Console.ReadLine();
  • }
  • }
  • /// <summary>
  • /// http://www.bibmath.net/crypto/poly/vigenere.php3
  • /// </summary>
  • public class Vigenere
  • {
  • private string key;
  • public string Key
  • {
  • get { return key; }
  • }
  • public Vigenere(string cle)
  • {
  • // //Je code la clé avec une autre clé qui reprend tout les caractères
  • // #region "Mis en place de Alphabet"
  • // StringBuilder _key = new StringBuilder();
  • // for (int i = 0; i < 65535; i++)
  • // {
  • // _key.Append((char)i);
  • // }
  • // key = _key.ToString();
  • // #endregion
  • // key = Encrypt(cle)
  • key = cle;
  • }
  • public string Encrypt(string ChaineaEncoder)
  • {
  • string encrypt = null;
  • for (int i = 0; i < ChaineaEncoder.Length; i++)
  • {
  • // encrypt += (char)(((short)key[i % key.Length] + (short)ChaineaEncoder[i])%65536);
  • // Equivalent à :
  • encrypt += Convert.ToString(Convert.ToChar((Convert.ToInt16(key[i % key.Length]) + Convert.ToInt16(ChaineaEncoder[i])) % 65536));
  • }
  • return encrypt;
  • }
  • public string Decrypt(string ChaineaDecrypter)
  • {
  • string decrypt = null;
  • for (int i = 0; i < ChaineaDecrypter.Length; i++)
  • {
  • // decrypt += (Char)(((short)ChaineaDecrypter[i] - (short)(key[i % key.Length])) % 65536);
  • // Equivalent à :
  • decrypt += Convert.ToString(Convert.ToChar(((Convert.ToInt16(ChaineaDecrypter[i]) - Convert.ToInt16(key[i % key.Length])) % 65536)));
  • }
  • return decrypt;
  • }
  • }
  • }
  • //------------------------ Ancienne Version ---------------------------
  • #region Using directives
  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • #endregion
  • namespace ConsoleApplication1
  • {
  • class Program
  • {
  • static void Main(string[] args)
  • {
  • string sKey = "Ceci est la clé avec des caractères non valide /+ ";
  • string sValue = "Quelle phrase voulait vous encodé ?";
  • Vigenere oVigenere = new Vigenere(sKey);
  • Console.WriteLine(sValue);
  • Console.WriteLine("donne une fois code : ");
  • Console.WriteLine(oVigenere.Encrypt(sValue));
  • Console.ReadLine();
  • Console.WriteLine("Verification : ");
  • Console.WriteLine(oVigenere.Encrypt(oVigenere.Decrypt(sValue)));
  • Console.ReadLine();
  • }
  • }
  • /// <summary>
  • /// http://www.bibmath.net/crypto/poly/vigenere.php3
  • /// </summary>
  • public class Vigenere
  • {
  • #region " Constante "
  • private const string Alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
  • #endregion
  • #region " Properties "
  • private string key;
  • public string Key
  • {
  • get { return key; }
  • }
  • #endregion
  • #region " Constructor "
  • /// <summary>
  • /// Je définis une clé provisoire pour pouvoir encoder la clé.
  • /// J'encode la clé pour deux raisons, il sera ensuite plus difficile de décrypter, et cela resoud les problèmes d'une clé contenant des caractère interdit
  • /// </summary>
  • /// <param name="cle"></param>
  • public Vigenere(string cle)
  • {
  • key = "Cryptage par algorythme de Vigenere";
  • key = Encrypt(cle);
  • }
  • #endregion
  • #region " Encryptage "
  • public string Encrypt(string ChaineaEncoder)
  • {
  • string encrypt = null;
  • for (int i = 0; i < ChaineaEncoder.Length; i++)
  • {
  • char test = CharEncrypt(key[i % key.Length], ChaineaEncoder[i]);
  • encrypt += @test;
  • }
  • return encrypt;
  • }
  • /// <summary>
  • /// S'il existe un caractère invalide il serait remplacé par le caractère d'espacement
  • /// </summary>
  • /// <param name="X"></param>
  • /// <param name="Y"></param>
  • /// <returns></returns>
  • private char CharEncrypt(char X, char Y)
  • {
  • byte NumX = (byte)Alphabet.IndexOf(X);
  • byte NumY = (byte)Alphabet.IndexOf(Y);
  • if (NumY.Equals((byte)255))
  • {
  • Console.WriteLine("Charactère à encoder invalide : " + Y.ToString());
  • NumY = (byte)Alphabet.IndexOf(' ');
  • }
  • string alphabet;
  • alphabet = Alphabet.Substring(NumY) + Alphabet.Remove(NumY);
  • return alphabet[NumX];
  • }
  • #endregion
  • #region " Decryptage "
  • public string Decrypt(string ChaineaDecrypter)
  • {
  • string decrypt = null;
  • for (int i = 0; i < ChaineaDecrypter.Length; i++)
  • {
  • char test = CharDecrypt(key[i % key.Length], ChaineaDecrypter[i]);
  • decrypt += @test;
  • }
  • return decrypt;
  • }
  • private char CharDecrypt(char X, char Result)
  • {
  • byte NumX = (byte)Alphabet.IndexOf(X);
  • byte NumResult = (byte)Alphabet.IndexOf(Result);
  • string alphabet;
  • alphabet = Alphabet.Substring(NumX) + Alphabet.Remove(NumX);
  • return (char)Alphabet[alphabet.IndexOf(Result)];
  • }
  • #endregion
  • }
  • }
#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sKey = "Ceci est la chaîne clé";

            string sValue = "Voici le texte à encoder avec quelques caractères pénibles // !=] %ù ô i () \" ";



            Vigenere oVigenere = new Vigenere(sKey);
            Console.WriteLine(sValue);
            Console.WriteLine("donne une fois code : ");
            DateTime dDateDeb = DateTime.Now;
            Console.WriteLine(oVigenere.Encrypt(sValue));
            Console.WriteLine("L'encryptage a duré : " + (DateTime.Now.Subtract(dDateDeb).Ticks / 10000) + " ms");

            Console.ReadLine();

            Console.WriteLine("Verification : ");
            Console.WriteLine(oVigenere.Decrypt(oVigenere.Encrypt(sValue)));
            Console.ReadLine();
        }
    }


    /// <summary>
    /// http://www.bibmath.net/crypto/poly/vigenere.php3
    /// </summary>
    public class Vigenere
    {

        private string key;
        public string Key
        {
            get { return key; }
        }

        public Vigenere(string cle)
        {

            //            //Je code la clé avec une autre clé qui reprend tout les caractères
            //            #region "Mis en place de Alphabet"
            //            StringBuilder _key = new StringBuilder();
            //            for (int i = 0; i < 65535; i++)
            //            {
            //                _key.Append((char)i);
            //            }
            //            key = _key.ToString();
            //            #endregion
            //            key = Encrypt(cle)

            key = cle;

        }

        public string Encrypt(string ChaineaEncoder)
        {
            string encrypt = null;

            for (int i = 0; i < ChaineaEncoder.Length; i++)
            {
                // encrypt += (char)(((short)key[i % key.Length] + (short)ChaineaEncoder[i])%65536);
                // Equivalent à : 
                encrypt += Convert.ToString(Convert.ToChar((Convert.ToInt16(key[i % key.Length]) + Convert.ToInt16(ChaineaEncoder[i])) % 65536));
            }

            return encrypt;
        }

        public string Decrypt(string ChaineaDecrypter)
        {
            string decrypt = null;

            for (int i = 0; i < ChaineaDecrypter.Length; i++)
            {
                // decrypt += (Char)(((short)ChaineaDecrypter[i] - (short)(key[i % key.Length])) % 65536);
                // Equivalent à : 
                decrypt += Convert.ToString(Convert.ToChar(((Convert.ToInt16(ChaineaDecrypter[i]) - Convert.ToInt16(key[i % key.Length])) % 65536)));
            }

            return decrypt;
        }

    }
}



//------------------------ Ancienne Version ---------------------------

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sKey = "Ceci est la clé avec des caractères non valide /+ ";

            string sValue = "Quelle phrase voulait vous encodé ?";

            Vigenere oVigenere = new Vigenere(sKey);
            Console.WriteLine(sValue);
            Console.WriteLine("donne une fois code : ");
            Console.WriteLine(oVigenere.Encrypt(sValue));
            Console.ReadLine();

            Console.WriteLine("Verification : ");
            Console.WriteLine(oVigenere.Encrypt(oVigenere.Decrypt(sValue)));
            Console.ReadLine();
        }
    }


    /// <summary>
    /// http://www.bibmath.net/crypto/poly/vigenere.php3
    /// </summary>
    public class Vigenere
    {

        #region " Constante "

        private const string Alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";

        #endregion

        #region " Properties "

        private string key;
        public string Key
        {
            get { return key; }
        }

        #endregion

        #region " Constructor "

        /// <summary>
        /// Je définis une clé provisoire pour pouvoir encoder la clé.
        /// J'encode la clé pour deux raisons, il sera ensuite plus difficile de décrypter, et cela resoud les problèmes d'une clé contenant des caractère interdit
        /// </summary>
        /// <param name="cle"></param>
        public Vigenere(string cle)
        {
            key = "Cryptage par algorythme de Vigenere";
            key = Encrypt(cle);
        }

        #endregion

        #region " Encryptage "

        public string Encrypt(string ChaineaEncoder)
        {
            string encrypt = null;

            for (int i = 0; i < ChaineaEncoder.Length; i++)
            {
                char test = CharEncrypt(key[i % key.Length], ChaineaEncoder[i]);
                encrypt += @test;
            }

            return encrypt;
        }

        /// <summary>
        /// S'il existe un caractère invalide il serait remplacé par le caractère d'espacement
        /// </summary>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <returns></returns>
        private char CharEncrypt(char X, char Y)
        {

            byte NumX = (byte)Alphabet.IndexOf(X);
            byte NumY = (byte)Alphabet.IndexOf(Y);
            if (NumY.Equals((byte)255))
            {
                Console.WriteLine("Charactère à encoder invalide : " + Y.ToString());
                NumY = (byte)Alphabet.IndexOf(' ');
            }
            string alphabet;
            alphabet = Alphabet.Substring(NumY) + Alphabet.Remove(NumY);

            return alphabet[NumX];
        }

        #endregion

        #region " Decryptage "

        public string Decrypt(string ChaineaDecrypter)
        {
            string decrypt = null;

            for (int i = 0; i < ChaineaDecrypter.Length; i++)
            {
                char test = CharDecrypt(key[i % key.Length], ChaineaDecrypter[i]);
                decrypt += @test;
            }

            return decrypt;
        }

        private char CharDecrypt(char X, char Result)
        {

            byte NumX = (byte)Alphabet.IndexOf(X);
            byte NumResult = (byte)Alphabet.IndexOf(Result);
            string alphabet;
            alphabet = Alphabet.Substring(NumX) + Alphabet.Remove(NumX);

            return (char)Alphabet[alphabet.IndexOf(Result)];
        }
        #endregion

    }
}


 Conclusion

J'ai utilisé VC# 2005 Express Edition pour faire ce code, je pense que ca devrait qd meme fonctionner avec la framework 1.1 si c'est pas le cas faites le moi savoir

c'est la premiere fois que je codais en C# donc c'est possible que vous voyez des trucs farfelus, si c'est le cas, merci de me le dire.

j'aimerais avoir vos avis sur cette simplissime classe aussi bien sur cette classe que sur ma facon de codé en C#


 Historique

09 août 2004 21:36:44 :
Ajout : - Mini Gestion des erreurs - Quelques caractères à Alphabet - Encodage de la clé, pour éliminer les caractères interdit
10 août 2004 13:41:11 :
Correction de la limitation du au nombre de caractère

 Sources du même auteur

Source .NET (Dotnet) ENTITY FRAMEWORK - AVOIR UN INCLUDE TYPÉ
Source .NET (Dotnet) WEBTESTPLUGIN - IGNORER DES URLS LORS D'UN TEST WEB VISUAL S...
Source avec Zip Source .NET (Dotnet) MECANISME DE SYNCHRONISATION DE THREAD - MONITOR, MUTEX, SEM...
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES IMPRIMANTES - ADDIN POUR WHS
Source .NET (Dotnet) CALCUL DES NOMBRES PREMIERS PAR LA CRIBLE D'ÉRATOSTHÈNE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE DE RÉPERTOIRE (AES 256) par Vallorbain
Source avec Zip Source .NET (Dotnet) COPIE DE CLÉ USB AUTOMATIQUE par pigedanslelac
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHY par DanMor498
Source .NET (Dotnet) MSA CRYPTAGE NON REVERSIBLE PAR MATRICE SEMI-ALÉATOIRE par yohan49
Source avec une capture Source .NET (Dotnet) CPRB CRIPTAGE PAR POSITION ALÉATOIRE DE CLOCK par yohan49

 Sources en rapport avec celle ci

Source .NET (Dotnet) MSA CRYPTAGE NON REVERSIBLE PAR MATRICE SEMI-ALÉATOIRE par yohan49
Source avec une capture Source .NET (Dotnet) CPRB CRIPTAGE PAR POSITION ALÉATOIRE DE CLOCK par yohan49
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTAGE PAR CESAR par youma85
Source avec Zip Source avec une capture Source .NET (Dotnet) CAPTCHA [VS 2005] par DelphiCool
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTO MANAGER par mastercatz

Commentaires et avis

Commentaire de SimonKari le 10/08/2004 10:07:12

C'est un code assez concis que tu as là ! Mais en y réflechissant 2 minutes, j'ai pondu ceci :

Asc(Lettre à crypter) + Asc(Lettre clé) = Asc(Lettre codée)

Avec cette formule, il n'y a aucune limitation. Il faut simplement connaitre la page de code désirée. Et avoir 2 tableau qui contiennent le texte à crypter et le texte dupliqué de la clé.

Qu'en penses-tu ?

Commentaire de ousta le 10/08/2004 10:42:56

et lencryptage sha1 il ne vous convient pas?

Commentaire de jesusonline le 10/08/2004 11:12:19 administrateur CS

Je ne connais pas l'encryptage sha1, je sais qu'il existe dans le framework des classes de cryptage.
Mais mon but, n'est pas de concurrencer les grands algo de cryptage, mais je considére ca plus comme un exercice, j'ai trouvé un algo de cryptage sur internet et je m'entraine à le traduire en C#

Mais je suis d'accord que d'autres algo sont surement plus performant


SimonKari, je vais reflechir à ta méthode, mais j'ai un problème je ne trouve pas la fonction Asc,  je sais qu'elle existe en VB mais je ne sais encore pas comment faire pour qu'elle soit presente en C#

j'ai essayé using Microsoft.VisualBasic; mais ca ne marche pas :(

mais je reflechis à ta solution :)

Commentaire de SimonKari le 10/08/2004 12:17:50

System.Convert.ToInt32(Char)

Commentaire de jesusonline le 10/08/2004 13:43:19 administrateur CS

Merci SimonKari

J'ai trouvé une autre methode :

                encrypt += (char)(((short)key[i % key.Length] + (short)ChaineaEncoder[i])%65536);
               qui est equivalent à :
                encrypt += Convert.ToString(Convert.ToChar((Convert.ToInt16(key[i % key.Length]) + Convert.ToInt16(ChaineaEncoder[i])) % 65536));

la premiere est plus compact, mais je sais pas si elles sont equivalentes.

Je vais regarder avec ILDASM

Commentaire de jesusonline le 10/08/2004 13:55:32 administrateur CS

Je viens de comparer le code IL donc avec la version abregé le code de Decrypt faisait 83bytes contre 95bytes, et la grande difference c'est que dans le code allegé

au lieu de cette ligne (code IL) :
call int16 [mscorlib]System.Convert::ToInt16(char)

la version abregé a seulement  
conv.i2

Je sais pas si il y a une grande difference entre les deux,en tout cas niveau temps d'execution c'est sensiblement pareil, il faudrais faire des tests a grande echelle pour se rendre compte.

il y aurait il qqn qui connaitrait un peu le code IL ?

merci

Commentaire de deck_bsd le 18/01/2006 19:44:42

Merci pour l'adresse de l'algo :) Moi je m'en vai le faire en C :p .

Commentaire de ghuysmans99 le 29/11/2006 17:56:55

merci pour la formule, SimonKari !

Commentaire de pwalinett le 03/10/2007 11:04:02

bonjour, je voulais juste dire, moi je suis débutante en c# et on a des fois besoin de ce genre de code qui est efficace et pascompliqué. il m'a été bien utile alors merci beaucoup. tout n'a pas toujours besoin d'être compliqué! :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

cryptage [ par zeusdsl ] bonjour je debute le C depuis peu et je faire un prog de cryptage selon vigenereles codes sources que j ai eu sur d autres sites sont un pe Cryptage décryptage [ par maevacmoi ] Hello !Je dois créer pour aujourd'hui 15h une fonction C# permettant d'encrypter (et décrypter) un string avec une clef donnée (cf ci-dessous). J'ai t Cryptage ... [ par maevacmoi ] Hello !Je voudrais faire une fonction toute bête qui crypte un string selon une clef donnée et renvoi un string crypté. Et une autre fonction qui reço Cryptage asymetrique [ par stronglou ] LoulouBonjour,Quelqu'un pourrait-il me dire comment fairepour crypter un fichier ou autre en utilisant le cryptage asymétrique (si p Cryptage Decryptage à la volée [ par jdaviaud ] Salut tout le mondej'ai un programme qui se base sur un fichier Ini pour sa configuration.Ce que je veux, c'est lorsqu'il y a une modif de la configur Programme de cryptage [ par LFHL ] LFHLSalut je m'appelle LFHL je suis débutant je voudrais savoir comment fonctionne L'Algorithme ou le cryptage car je voudrais crée un programme de cr Police et cryptage [ par LFHL ] LFHLBonjour je voudrai savoir si on peut  faire une police de caracére pour un programme? j'expliqueje consoi un programme de cryptage et quand l'util cryptage de la table des utilisateurs [ par cudenetf ] bonjour,j'utilise sqlexpress et j'aimerais que ma table contenant le sutilisateurs avec leur login , mot de passe et niveau soit crypté.peut -on  cryp code source vigenere [ par ptipat ] bonjour , voila je cherche comment on utilise les sources pour pouvoir decrypter un pass , ou existe t'il un pti logiciel qui fait ceci , j'ai la cles


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 : 0,780 sec (4)

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