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

 .NET Discussion :

Chiffrement déchiffrement (RSA)


Sujet :

.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut Chiffrement déchiffrement (RSA)
    Bonjour,
    je cherche à faire communiquer 2 serveurs (un .net et un PHP)de manière "sécurisé"
    Je me suis donc orienté vers l'utilisation du système de clé public/clé privé (ici via RSA)

    mon objectif:
    utiliser la clé public du serveur php pour encrypter un message (en c#) ,
    utiliser la clé privé du serveur php pour décodé le message reçu (en PHP)

    J'ai pas mal galéré car mes clés au format pem, j'ai ajouter comme référence bouncycastle http://www.bouncycastle.org/csharp/

    Voici les extraits de mon code:
    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
            protected void Button1_Click(object sender, EventArgs e)
            {
                string inputMessage = @"Texte secret Provenant de C#";
                UTF8Encoding utf8enc = new UTF8Encoding();
                byte[] inputBytes = utf8enc.GetBytes(inputMessage);
     
     
     
                var fileStream = File.OpenText("C:\\Users\\utilisateurdupc\\Desktop\\public1024.key");
                var pemReader = new PemReader(fileStream);
                var KeyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();
     
     
                AsymmetricKeyParameter publicKey = KeyParameter;
     
                // Creating the RSA algorithm object
                IAsymmetricBlockCipher cipher = new RsaEngine();
     
                // Initializing the RSA object for Encryption with RSA public key. Remember, for encryption, public key is needed
                cipher.Init(true, publicKey);
     
                //Encrypting the input bytes
                byte[] cipheredBytes = cipher.ProcessBlock(inputBytes, 0, inputMessage.Length);
                Debug.WriteLine(cipheredBytes);
                Debug.WriteLine(Convert.ToBase64String(cipheredBytes));
    }
    php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    <?
    $privateKey = openssl_pkey_get_private(file_get_contents("./priv1024.key"));
    $publicKey = openssl_pkey_get_public(file_get_contents("./public1024.key"));
    $message=
    "iVxSTQF897bnlWlb6rA8k1ZRd7FmRcUklQTyGyHwL1fuaXzpR1QG7a450Y+yEV5ik8hlymRkxpREAiDCwYUDgULF985dHFaEpoa/RmnGhDVm8WOxvB+yuIupTrAa/rgEjYS74PlNtJ44x2zjweqLxo1hLBXZL3kxbQcfNT53g1I=";
     
    $encryptedData=base64_decode($message);
    $erreur=openssl_private_decrypt($encryptedData, $plainTextData, $privateKey);
     
    var_dump($erreur,$encryptedData, $plainTextData, $privateKey);
    ?>
    De mon code C# je récupère la Chaine Convert.ToBase64String(cipheredBytes) : iVxSTQF897bnlWlb6rA8k1ZRd7FmRcUklQTyGyHwL1fuaXzpR1QG7a450Y+yEV5ik8hlymRkxpREAiDCwYUDgULF985dHFaEpoa/RmnGhDVm8WOxvB+yuIupTrAa/rgEjYS74PlNtJ44x2zjweqLxo1hLBXZL3kxbQcfNT53g1I=

    Mon problème:
    Mon soucis est que lorsque j'utilise la chaine produite par le C# Le code php je ne parviens pas à décrypter correctement mon message

    J'imagine faire une erreur (coté C#) mais je ne trouve pas l'endroit

    D'avance merci pour votre aide

    note: j'ai réalisé un projet spécifique pour tester cette fonctionnalité (D’où l'aspect brut, sans liaison, sans tenant ni aboutissant)
    note2:message aux modos pas entierment sur d'avoir posté au bon endroit au besoin n'hésitez pas à déplacer

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Est-ce que ça pourrait venir d'un problème d'encodage ?

    D'ailleurs, arrives-tu à coder/décoder en C# uniquement et en php uniquement ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    Alors en ce qui concerne le décodage :
    avec le code actuel , je n'arrive a le décoder qu'en C#

    En ce qui concerne l'encodage
    Sur une ancienne version , je parvenais a décoder en php (avec la clé prive) (encoder en C# avec la clé privé )
    De plus comme je convertis mon message base64 en C# et que je fais l'opération inverse en PHP je pense échapper aux problèmes d'encodage

    Bref tout ceci pour dire que je ne pense pas que ça viennent de là (Je vais malgré tout revérifier .... on ne sais jamais)

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    J'ai peut être détecté un élément qui justifie mon problème (bien que je n'en soit en réalité même pas sûr)
    j'utilise la fonction suivante (copiée collée direct d'internet) pour afficher ma clé public :AsymmetricKeyParameter publicKey (voire code dans mon premier post)
    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
    static void ExportRsaPublicKey(AsymmetricKeyParameter publicKey)
            {
                var subjectPublicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
                var rsaPublicKeyStructure = RsaPublicKeyStructure.GetInstance(subjectPublicKeyInfo.GetPublicKey());
                var rsaPublicKeyPemBytes = Base64.Encode(rsaPublicKeyStructure.GetEncoded());
     
                var stringBuilder = new StringBuilder();
     
                stringBuilder.AppendLine("-----BEGIN RSA PUBLIC KEY-----");
     
                for (int i = 0; i < rsaPublicKeyPemBytes.Length; ++i)
                {
                    stringBuilder.Append((char)rsaPublicKeyPemBytes[i]);
     
                    // wraps after 64 column
                    if (((i + 1) % 64) == 0)
                        stringBuilder.AppendLine();
                }
     
                stringBuilder.AppendLine();
                stringBuilder.AppendLine("-----END RSA PUBLIC KEY-----");
     
                Debug.WriteLine(stringBuilder.ToString());
            }
    et je m’aperçois que ces deux clés (celle du fichier et celle importé par le programme) ne sont pas rigoureusement identique: (non ce n'est pas une erreur je pointe pas sur deux fichiers différents)
    // clé publique du fileStream
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCm4kmUX5TVjtkZl39NdVmN7Z8u
    2pVTQQloGgqz97VL/YDhdkyRtwQMtuyZ2/y1CB1JXEffZjV9CTJl5OyWL5twyG1w
    elQdp/mJuPw430U84BTgs2FZ+Ncz0VxP/AUm+Acl+BDHx9L7uffcuOaJVynzuNWC
    MSwGN5KqAgwPeD5WKQIDAQAB
    -----END PUBLIC KEY-----

    // clé publique du fileStream publicKey via la fonction ExportRsaPublicKey
    -----BEGIN RSA PUBLIC KEY-----
    MIGJAoGBAKbiSZRflNWO2RmXf011WY3tny7alVNBCWgaCrP3tUv9gOF2TJG3BAy2
    7Jnb/LUIHUlcR99mNX0JMmXk7JYvm3DIbXB6VB2n+Ym4/DjfRTzgFOCzYVn41zPR
    XE/8BSb4ByX4EMfH0vu599y45olXKfO41YIxLAY3kqoCDA94PlYpAgMBAAE=
    -----END RSA PUBLIC KEY-----

Discussions similaires

  1. Exemple de chiffrement-déchiffrement 128 bits
    Par n5Rzn1D9dC dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/05/2025, 02h28
  2. Chiffrement/déchiffrement très simple
    Par OphyTe dans le forum Sécurité
    Réponses: 4
    Dernier message: 11/12/2014, 00h12
  3. Chiffrement Déchiffrement string
    Par Kexian_ dans le forum Général Python
    Réponses: 11
    Dernier message: 26/04/2012, 02h07
  4. chiffrement/déchiffrement fichier exercice du tutorial
    Par ghaddou dans le forum Débuter
    Réponses: 3
    Dernier message: 01/04/2012, 14h44
  5. Faire du chiffrement RSA avec SATSA
    Par skip78 dans le forum Java ME
    Réponses: 3
    Dernier message: 01/06/2009, 16h58

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