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

Codes sources à télécharger Delphi Discussion :

Chiffrage/déchiffrage d'une string : petit exemple


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 658
    Points : 3 599
    Points
    3 599
    Billets dans le blog
    2
    Par défaut Chiffrage/déchiffrage d'une string : petit exemple
    Bonjour,

    Cela fait quelques temps que je n'avais rien posté sur Developpez. A titre perso, je travaille sur un jeu vidéo (avec Delphi bien-sûr).

    Je vous propose un petit exemple simple de chiffrage/déchiffrage d'une chaine de caractères. Ce n'est pas un chiffrage compliqué, mais vous pouvez complexifier comme vous le souhaitez.

    La méthode de chiffrage va, pour chaque caractères de la chaine, récupérer son code ASCII, lui ajouter du sel (un entier positif) et calculer le carré. La valeur numérique obtenue est issue du code ASCII du caractère mais assez différente pour éviter de faire le rapprochement trop vite . Cette valeur est alors convertie en string suivie d'un espace (qui sert de caractère séparateur entre chaque caractère "chiffré"). Vous devez ajouter l'unité Math dans les uses pour utiliser l'exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function chiffrerChaine(uneChaine : string; sel : word): string;
    begin
      for var c in uneChaine do begin
        var rValeur := power(ord(c) + sel, 2);
        result := result + FloatToStr(rValeur) + ' ';
      end;
    end;
    La méthode pour déchiffrer fait simplement le traitement inverse. On parcourt la chaine de caractère chiffrée jusqu'à trouver le séparateur afin de récupérer un à un les codes de caractères. Une fois que l'on a un code, on fait le traitement mathématique inverse de celui appliqué lors du chiffrement (il faut évidemment que le "sel" soit le même que celui utilisé lors du chiffrement). Dans l'exemple, on calcule la racine carrée du code chiffré et on lui enlève le sel.

    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
     
    function dechiffrerChaine(uneChaine : string; sel : word): string;
    begin
      var sDec := '';
      for var c in uneChaine do begin
        if c <> ' ' then sDec := sDec + c
        else begin
          if not(sDec.IsEmpty) then begin
            var rValeur := sqrt(StrToInt64(sDec));
            var sTemp := FloatToStr(rValeur);
            result := result + chr(StrToInt(sTemp) - sel);
            sDec := '';
          end;
        end;
      end;
    end;
    En l'état c'est très simple ça ne résistera pas longtemps à un hacker mais c'est un exemple qui fait le job. Vous pouvez évidemment faire un traitement mathématique plus compliqué pour générer un code à partir du code ASCII du caractère. Il faudra alors évidemment adapter la méthode de déchiffrement.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut


    1°) je m'interoge sur l'utilité de passer par un float car tu n'utilise que des entier
    2°) Le fait de passer par le carré et un sel ne changera rien a la distribution des caractere dans le texte
    ce qui veux dire que la valeur E aura toujours la meme valeur ou qu'elle se trouve dans le texte et donc facilitera le decriptage

    3°) pour palier a ceci tu pourrais utiliser un sel variable ce qui devrais modifier cette fameuse distribution de caractere
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Citation Envoyé par anapurna Voir le message
    pour palier a ceci tu pourrais utiliser un sel variable ce qui devrais modifier cette fameuse distribution de caractere
    Une phrase complète dont on utiliserait la valeur de chaque caractère les uns après les autres, par exemple ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    dans un projet je voulais mettre un mot de passe qui ne soit pas tout de suite repérable...j'ai simplement pris le caractère suivant dans la table ascii

    ebot!vo!qspkfu!kf!wpvmbjt!nfuusf!vo!npu!ef!qbttf!rvj!of!tpju!qbt!upvu!ef!tvjuf!sfqêsbcmf///k(bj!tjnqmfnfou!qsjt!mf!dbsbduésf!tvjwbou!ebot!mb!ubcmf!btdjj!;*
    on peut presque le faire à la main...sinon le codage est le décodage est ultra simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    begin
      var s : AnsiString := 'dans un projet je voulais mettre un mot de passe qui ne soit pas tout de suite repérable...j''ai simplement pris le caractère suivant dans la table ascii :)';
      for var i := 1 to Length(s) do
          Inc(s[i]);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    begin
      var s : AnsiString := 'ebot!vo!qspkfu!kf!wpvmbjt!nfuusf!vo!npu!ef!qbttf!rvj!of!tpju!qbt!upvu!ef!tvjuf!sfqêsbcmf///k(bj!tjnqmfnfou!qsjt!mf!dbsbduésf!tvjwbou!ebot!mb!ubcmf!btdjj!;*';
      for var i := 1 to Length(s) do
          Dec(s[i]);
      ShowMessage(s);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 658
    Points : 3 599
    Points
    3 599
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    On peut évidemment faire plus compliqué. L'objectif est juste de montrer quelque chose de très simple, qui permet déjà une première approche. C'est la base d'une méthode plus complexe (algo plus complexe, changement d'ordre des caractères, autres sels...) que j'utilise dans certains de mes projets.

    L'utilisation des float était liée à la fonction power de l'unité Math qui renvoie un float et que j'utilise fréquemment l'inférence de type pour déclarer mes variables.

    Je ne prétends pas avoir une fonction inviolable mais c'est pour éviter que tout le monde puisse trop facilement lire certaines informations dans des fichiers.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    dans ces cas la ... un simple xor suffit
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2010, 17h34
  2. Réponses: 1
    Dernier message: 09/06/2006, 09h42
  3. Réponses: 2
    Dernier message: 06/05/2006, 19h52
  4. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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