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

C# Discussion :

Crytptage de fichier, qu'est ce qui change à l'intérieur de celui ci ?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut Crytptage de fichier, qu'est ce qui change à l'intérieur de celui ci ?
    Bonsoir !

    J'aimerais me lancer dans un programme permettant le crytptage de fichier avec MA propre règle de cryptage.

    En effet, je me suis fais un petit algorithme de cryptage (Just for fun) et je me le suis mis sur papier.

    Mais maintenant arrive la quédition du : comment faire pour crypter mon fichier. En effet, qu'est ce qui rend un fichier crypter ? Ça source change ? Un mot de passe est mis dessus ? Comment puis je faire pour crypter mon fichier avec mon algorithme !?
    Enfin toute ces question dont je connais pas la réponse m'intrigue !

    Je me suis toujours demander ça, quand je crypte un fichier (avec un logiciel) qu'est ce qui le rend crypter ?

    Si vous pouvez m'aider ! Merci !

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 639
    Points : 2 148
    Points
    2 148
    Par défaut
    Bonjour ,

    Il y a plusieurs façon de crypter un fichier , en voici une :

    Tu lis le fichier byte par byte et tu appliques un algorithme lors de la réécriture.

    Par exemple , 1 byte sur 2 , tu le décale de 5 , et l'autre tu le multiplies par 2.

    Je t'ai fait un exemple avec un algo tout simple : on décale tout les bytes de 1 en arrière :

    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
            static public void Encrypt(string cheminSource, string cheminDestination)
            {
                byte[] bytes;
     
                using (FileStream stream = File.OpenRead(cheminSource))
                {
                    bytes = new byte[stream.Length];
                    stream.Read(bytes, 0, (int)stream.Length);
                    stream.Close();
                }
     
                using (FileStream stream = File.OpenWrite(cheminDestination))
                {
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        bytes[i] -= 1; // Algorithme tout simple ici
                        stream.WriteByte(bytes[i]);
                    }
                    stream.Close();
                }
            }
     
            static public void Decrypt(string cheminSource, string cheminDestination)
            {
                byte[] bytes;
     
                using (FileStream stream = File.OpenRead(cheminSource))
                {
                    bytes = new byte[stream.Length];
                    stream.Read(bytes, 0, (int)stream.Length);
                    stream.Close();
                }
     
                using (FileStream stream = File.OpenWrite(cheminDestination))
                {
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        bytes[i] += 1; // Algorithme tout simple ici
                        stream.WriteByte(bytes[i]);
                    }
                    stream.Close();
                }
            }
    Après , c'est une façon parmi tant d'autre.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un fichier est une suite d'octets
    les octets sont utilisés de différentes manière
    le fichier texte ascii est le plus simple, chaque octet représente un caractère selon la table ascii
    un cryptage modifie plusieurs ou tous les octets de fichier, donc un fichier texte crypté ouvert avec un éditeur affichera des caractères étranges

    les autres fichiers sont plus complexes au niveau de l'encodage, pour un fichier bitmap, il doit y avoir un descripteur en début de fichier puis chaque pixel est encodé selon sa couleur (par exemple pour un fichier bitmap 32bits par pixel chaque pixel est défini par 4 octets)
    là aussi si tu modifies les octets le fichier ne représentera plus la même chose

    et après l'encodage se compléxifie selon le type de fichier (jpg, doc ...)
    un fichier xlsx par exemple si j'ai bien suivi c'est des fichiers xml dans des dossiers, le tout zippé

    en bref modifier les octets rend le fichier illisible
    un cryptage se base souvent sur une clé, tu peux utiliser un mot de passe comme clé, faisaint que la clé n'est pas dans le programme (qui est décompilable)
    après en force brute ca peut surement se décrypter quand même (essayer tous les mots de passe)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    D'accord ! Voilà qui est déjà plus clair !

    Mais maintenant imaginons je ceeer un logiciel qui permet de crypter des données. Ma façon de faire est révolutionnaire, mais le logiciel est mis sur internet (pour que tout le monde puisse l'utiliser et crypter ce qu'ils veulent)

    Est ce qu'un hacker/cracker pourra décompiler mon logiciel Coder en C# pour voir ce qu'il y a à linterieur et comprendre ma façon de crypter ? Ou est ce qu'il sera impossible de décompiler le logiciel que j'ai creer ?


    Je me suis toujours demandé si le fais de ne pas réussir à décrypter un fichier car celui est trop complexe, mais d'avoir le logiciel qui a permis ce crytptage, me permettra de le décompiler et de suivre la logique de l'algorithme :/

    En tout cas merci pour ces infos !

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un logiciel codé en .net est décompilable en un clic et on voit quasiment le code source
    mais même un logiciel codé sur un langage plus bas niveau est décompilable et un expert pourra comprendre ce que tu fais

    après si une partie du programme n'est pas accessible (par exemple un web service) alors le risque de piratage est moindre
    genre si ton programme distribué se connecte à un service en lui fournissant les octets et retourne les octets cryptés alors ton programme est forcément à l'abri (et avec saisi d'un mot de passe et une détection de brute force)
    par contre ca oblige à être connecté à internet, et à transférer toutes les données dans les 2 sens
    à part ca tu seras forcément vulnérable, mais la sécurité nécessaire à un programme dépend de sa renommé et de son utilité, sachant que tous les cas le risque 0 n'existe pas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Donc pour toi, si je creer un logiciel permettant de crypté des fichiers, quelle est la meilleur facon de sécurisé mon algorithme de cryptage ?

    Je veux dire par la, qu'il y a bien des bon gros logiciels de cryptage de donné (par exemple les banques) ou les logiciels sont seulement en local non ?

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ma conclusion serait plutot il est impossible de sécuriser quoi que ce soit ^^
    et on voit bien tous les jours des grosses multinationales qui se font pirater alors qu'elles ont des ingénieurs pour sécuriser le tout ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Comme disait un certain Augustus, la seule vrai façon d'échanger un message secret,c'est de l'écrire dans un langage que tes non-amis nous comprendront pas.malheureusement a l'heure d'aujourd'hui, on peut faire de l'analyse statistique de tout. Ça prend juste du temps.
    Et si ça prend trop de temps il devient illégal ( comme les RSA avec clef > 2048 en France)

    Ceci dit si tu veux protéger ton algo de cryptage , c'est simple . fait en un web service. Et donne l'accès uniquement aux personnes de confiance.

    Si tu cherches une solution moins gourmande, essaie de modéliser ton algorithme par des matrices ( genre polymorphisme ou transition d'État) et fait en sorte que celles ci soient téléchargées et supprimées après usage.
    Ça rappelle enigma tout ça.

  9. #9
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    L'encryption et la décryption de données sont des spécialitées de pointes. Plusieurs ingénieurs, mathématiciens et théoriciens y travail a temps plein.

    Un bon algo d'encryption ne se base pas sur l'obfuscation du code source pour sa sécurité. En fait, les meilleurs algo sont publié et accessible a tous car c'est vraiment la seule façon de démontrer leur éfficacité lors du "peer review".
    Après tout, les clé d'encryptions ne devraient pas être dans l'exécutable. Dans le meilleurs des mondes, votre application devrait même utiliser plusieurs clés, ou une clé fractionné en deux, publique et privé. Encore mieux, une de ces clés ne devrait pas permettre son stockage sur un médium lisible par un PC (médium physique, non magnétique). Un hacker devrait alors avoir accès à votre domicile ou votre personne pour avoir cette clé.

    Bien sur, l'encryption ne devrait pas être non plus trop symétrique ( du un byte pour un byte) afin de prévenir la détection de motif ou d'indice en ajoutant du "bruit", aussi appelé "salting" en anglais, dans le fichier de destination.

    La plupart des hack de sécurité lié à l'encryptage exploite des "bug" dans l'implementation logiciel de ceux-ci.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/06/2013, 14h43
  2. Google Panda : qu'est-ce qui change avec les CMS ?
    Par Intuitiv dans le forum Référencement
    Réponses: 1
    Dernier message: 01/09/2011, 12h03
  3. [Subversion] qu'est ce qui a changé à l'update ?
    Par L. Sierra dans le forum NetBeans
    Réponses: 2
    Dernier message: 31/12/2008, 13h59
  4. Réponses: 10
    Dernier message: 03/11/2008, 11h55
  5. [HttpUnit] upload file - le fichier qui change de taille
    Par Yannos94 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/09/2007, 14h29

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