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 :

securisation de mot de passe dans le code c# ecrit en dur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut securisation de mot de passe dans le code c# ecrit en dur
    Bonjour

    J'ai besoin d'écrire en dur dans mon code un mot de passe or j'ai toujours gardé en tête que le code généré par C# était facile à décompiler et que cette pratique etait hautement déconseilliée

    en cherchant des solutions je suis tombé sur protectedData https://msdn.microsoft.com/fr-fr/lib...ecteddata.aspx

    qui semble s'utiliser super simplement
    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
    using System.Security.Cryptography;
     
    ...
     
    static string ProtectPassword(string clearPassword)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(clearPassword);
        byte[] protectedBytes = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
        return Convert.ToBase64String(protectedBytes);
    }
     
    static string UnprotectPassword(string protectedPassword)
    {
        byte[] protectedBytes = Convert.FromBase64String(protectedPassword);
        byte[] bytes = ProtectedData.Unprotect(protectedBytes, null, DataProtectionScope.CurrentUser);
        return Encoding.UTF8.GetString(bytes);
    }
    Mais j'ai bien du mal à comprendre ce que ça fait et si oui ou non ça sécurise quelque chose...
    Si cryptage il y a la clé se trouve où ?
    Le mot de passe est protégé comment avec ça ?

    merci

  2. #2
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    oh punaise, de poster ma question m'a révélé un truc...

    Ça se base sur une clé qui n'est pas dans l'application mais propre à l'utilisateur windows en cours, c'est ça ?
    Je ne comprenais pas bine comment crypter avec ça un mot de passe en dur dans mon code mais en fait c'est juste pas possible puisque la clé est pas liée à mon application !

    J'ai quoi comme solution du coup ?

    Merci

  3. #3
    Membre éclairé Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Par défaut
    Perso, j'ai eu besoin d'avoir ça aussi "en dur" dans le code C#, du coup j'ai fais ça en 2 temps:

    1- J'ai un petit util fait maison tout bête, qui sert à chiffrer/déchiffrer les valeurs avec un algo perso qui fait des décalages tout con, mais rend illisible le résultat.

    2- Dans mon code, les valeurs à vérifier sont donc chiffrées, et j'ai une fonction qui déchiffre juste au moment de la comparaison.

    Ce n'est pas ultra sécurisé, c'est sûr, mais comme ça, les valeurs ne se voit pas du tout si tu ouvres le fichier avec un éditeur hexadécimal quelconque...

    Par contre, bien sûr si quelqu'un désassemble le code, il pourra reconstituer l'algo de déchiffrage...

    Mais dans mon cas, vu le type d'utilisateurs utilisant ce programme, ce risque est proche... du néant!!!

  4. #4
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    Bonjour et merci pour la réponse

    En creusant je suis tombé sur ce post édifiant
    http://www.developpez.net/forums/d14...cation-contre/

    Du coup j'ai passé l’après midi à jeter toute la structure de mon projet et toute la gestion des sécurités puisque tout reposait sur LE truc impossible : avoir un code en clair dans le code.

    Il se trouve que mes logiciels administrent ou utilisent des cartes électronique branchées au pc ou au réseau local. Je parle aujourd'hui à ces cartes électroniques en SSL/TLS du coup je suis en train d'étudier la possibilité de confier aux cartes électroniques le cryptage des mots de passe que j'ai à enregistrer. Ainsi plus besoin d'avoir une clé dans le logiciel pour crypter les infos à envoyer aux cartes. Ça remet pas mal de choses en cause coté ergonomie mais pour la sécurité ça semble pour le moment bien meilleur...

    Je peux avoir une clé par carte électronique, si quelqu'un découvre une clé il ne l'a que pour une carte.
    Mais dans la mesure ou je vais échanger avec les cartes en SSL/TLS et que la clé sera très difficilement piratable sur les cartes je peux même imaginer avec un code "universel" identique sur toutes les cartes. Ça simplifierait, quelque soit la carte que j'ai à disposition je disposerais d'un générateur de cryptage.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux aussi utiliser les conteneurs de cle RSA, comme indique sur ce lien, il vaut mieux utiliser les conteneurs de type lies a la machine (Machine-level) et non ceux lies a l'utilisateur en cours (User-level).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [XL-2010] Mot passe dans le code de programmation Macros
    Par many62 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/05/2016, 00h33
  2. introduire un mot de passe dans la ligne de code VBA
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/07/2009, 17h56
  3. Smbclient mettre le mot de passe dans la ligne de commande
    Par EpOnYmE187 dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2005, 19h39
  4. apache su mot de passe dans un fichier
    Par jean-jacques varvenne dans le forum Apache
    Réponses: 4
    Dernier message: 31/01/2005, 20h07
  5. sécuriser le mot de passe dans une page asp
    Par Redouane dans le forum ASP
    Réponses: 2
    Dernier message: 10/03/2004, 21h16

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