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

ASP.NET Discussion :

Algo d'encodage - décodage


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut Algo d'encodage - décodage
    Bonjour,
    J'ai besoin de coder/décoder une chaîne de caractère dans mon appli C#/ASP.NET. J'ai donc trouvé sur le net un tel algorithme en PHP :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public static function decrypt($val)
        {
     
        $mes=$val;
          $password="clé";
     
         $res=' ';
         $r="";
         $j=0;
         $tmp=0;
         $mes = base64_decode($mes);
         $lgmot = strlen($mes);
         for ($i = 0; $i < $lgmot; $i++) {
             $tmp = ord($mes[$i]) - ord($password[$j]);
             //ici on prends les 2 valeurs ascii des caratères du message
             //en position i et du mot de passe en position j et on les soustrait.
             //Si le résultat est négatif, pas de panique, on ajoute 256 et hop,
             //nous nous y retrouvons.
             if ($tmp < 0) {
                 $tmp = 256 + $tmp;
             }
             $r.=chr($tmp);
     
             if ($j == (strlen($password)-1)) {
                 $j= 0;
             } else {
                 $j=(($j % (strlen($password))) + 1);
                 //Modulo pour parcourrir le mot de passe...
             }
         }
         return $r;
        }
     
        public static function crypt($val)
        {
            $mes=$val;
            $password="clé";
            $res=' ';
            $r="";
            $j=0;
            $tmp=0;
            $lgmot = strlen($mes);
     
            for ($i = 0; $i < $lgmot; $i++) {
                $tmp = ord($mes[$i]) + ord($password[$j]);
     
                if ($tmp > 255) {
                    $tmp = $tmp - 256;
                }
     
                $r.=chr($tmp);
                if ($j == (strlen($password)-1)) {
                    $j= 0;
                } else {
                    $j=(($j % (strlen($password))) + 1);
                }
            }
            $r = base64_encode($r);
            return $r;
        }
    J'ai donc traduit ce code en C# :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
            protected string decrypt(string val) {
     
                string password = ConfigurationSettings.AppSettings["CRYPT_KEY"].ToString();
                string mes = val;
                string r = "";
                int j = 0;
                int tmp = 0;
                //string mes = DecodeBase64String(mel);
                int lgmot = mes.Length;
                for (int i = 0; i < lgmot; i++) {
                    tmp = (int)mes[i] - (int)password[j];
                    //ici on prends les 2 valeurs ascii des caratères du message
                    //en position i et du mot de passe en position j et on les soustrait.
                    //Si le résultat est négatif, pas de panique, on ajoute 256 et hop,
                    //nous nous y retrouvons.
                    if (tmp < 0) {
                        tmp = 256 + tmp;
                    }
                    r += (char)tmp;
     
                    if (j == (password.Length - 1)) {
                        j = 0;
                    } else {
                        j = (j % (password.Length)) + 1;
                        //Modulo pour parcourrir le mot de passe...
                    }
                }
                return r;
            }
     
            public string DecodeBase64String(string encodedData) {
                byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
                string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
                return returnValue;
            }
     
            protected string crypt(string val) {
                string password = ConfigurationSettings.AppSettings["CRYPT_KEY"].ToString();
                string r = "";
                int j = 0;
                int tmp = 0;
                int lgmot = val.Length;
     
                for (int i = 0; i < lgmot; i++) {
                    tmp = (int)val[i] + (int)password[j];
     
                    if (tmp > 255) {
                        tmp = tmp - 256;
                    }
     
                    r += (char)tmp;
                    if (j == (password.Length - 1)) {
                        j = 0;
                    } else {
                        j = (j % (password.Length)) + 1;
                    }
                }
                //r = EncodeStringToBase64(r);
                return r;
            }
     
            public string EncodeStringToBase64(string toEncode) {
                byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
                string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
                return returnValue;
            }
    Mais cet algo ne marche plus en C#...
    Séparément, les fonctions d'encodage/décodage en Base64 fonctionnent très bien, et l'algorithme fonctionne également sans l'encodage en B64.

    Mais en associant les 2 je ne retrouve jamais ma chaîne originale après l'avoir décryptée...

    Le pb pourrait-il être causé par le type d'encodage de texte propre à mon navigateur ? (UTF, ISO etc...)

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Peux tu préciser ton besoin fonctionnel ?

    Tu veux encoder en quoi et décoder en quoi ?

    Car normalement, le framework est "équipé" pour ce genre de tâche; donc je ne vois pas très bien ce que tu as à coder.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut
    Je travaille en parallèle avec une autre société qui nous impose l'algorithme de codage (celui en PHP).
    Mon but est de l'utiliser tel quel pour que nous retombions sur nos pieds lorsque nous cryptons/décryptons les chaînes de caractères dans les deux sens, entre les deux parties de l'application.
    Mais leur algo PHP fonctionne de leur côté, pas du mien, une fois traduit...

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par TheReturnOfMuton Voir le message
    Je travaille en parallèle avec une autre société qui nous impose l'algorithme de codage (celui en PHP).
    Je croyais que tu l'avais trouvé sur le Net...

    En tous les cas là je vois pas trop.

    Essayes avec Encoding.UTF8.GetBytes(text)

    Tu peux toujours leur demander de présenter un Web Service en httpS auquel ton site s'adressera pour encrypter/decrypter.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    En plus, encrypter un mot de passe, ça n'a pas trop de sens.

    Un mot de passe on le hash, on ne l'encrypte pas sinon ca revient à transférer le problème de stockage des mots de passe vers celui de stockage des clefs de cryptage.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Je croyais que tu l'avais trouvé sur le Net...

    En tous les cas là je vois pas trop.

    Essayes avec Encoding.UTF8.GetBytes(text)

    Tu peux toujours leur demander de présenter un Web Service en httpS auquel ton site s'adressera pour encrypter/decrypter.

    A+
    Eh bien j'ai suivi ton conseil, c'était bien le moyen sûr pour partager la même méthode de cryptage/décryptage, et ça marche très bien !
    Merci et @ + !

    ps : bluedeep ce n'est pas un mot de passe que je souhaitais crypter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. UrlEncode / UrlDecode: mauvais encodage décodage?
    Par DarkHerumor dans le forum ASP.NET
    Réponses: 15
    Dernier message: 06/07/2009, 19h09
  2. [Recherche bibliothèque] Encodage/décodage d'url
    Par Trunks dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 16/06/2009, 10h35
  3. Encodage / Décodage AAC en Java
    Par Reeter dans le forum Multimédia
    Réponses: 0
    Dernier message: 02/04/2009, 13h28
  4. Encodage & Décodage de fichier AMF avec java
    Par Kadran dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/03/2009, 12h24
  5. problème d'encodage décodage
    Par dj.motte dans le forum Général Python
    Réponses: 2
    Dernier message: 13/10/2008, 13h12

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