Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 18182|Répondre: 0

[Source] C# implémente en détail le chiffrement et le déchiffrement RSA

[Copié le lien]
Publié sur 04/11/2015 12:37:23 | | |
Les exigences du projet : générer une clé privée et une clé publique, chiffrer avec une clé publique, déchiffrer avec une clé privée, je l’ai implémenté comme ceci,



J’espère pouvoir aider des amis qui ont ce besoin.







Le code source est le suivant :



1. Générer une paire de clés :



          /// <summary>
        Générer une clé privée et une clé publique ARR[0] pour la clé privée ARR[1] pour la clé publique
        /// </summary>
        /// <returns></returns>
        chaîne statique publique[] GenerateKeys()
        {
            chaîne[] sKeys = nouvelle chaîne[2] ;
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ;
            sKeys[0] = rsa. ToXmlString (vrai) ;
            sKeys[1] = rsa. ToXmlString (faux) ;
            retour des sKeys ;
        }



2. Chiffrement :



      /// <summary>
        Cryptage RSA
        /// </summary>
       <param name="sSource » >Chaîne de sources</param>
        <param name="sPublicKey » >clé publique</param>
        /// <returns></returns>
        chaîne statique publique EncryptString(chaîne sSource, chaîne sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ;
            chaîne de texte clair = sSource ;
            RSA. FromXmlString (sPublicKey) ;
            octet[] chiffres cipherbytes ;
            octet[] octetEn = rsa. Encrypt(Encoding.UTF8.GetBytes(« a »), faux) ;
            cipherbytes = RSA. Encrypt (Encoding.UTF8.GetBytes(texte clair), faux) ;



            StringBuilder sbString = nouveau StringBuilder() ;
            pour (int i = 0 ; J’ai < Cipherbytes. Longueur ; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Déchiffrement :



  /// <summary>
        Décryptage RSA
        /// </summary>
        <param name="sSource">Chaîne de sources</param>
        <param name="sPrivateKey">Clé privée</param>
        /// <returns></returns>
        chaîne statique publique DecryptString(Source de chaîne, chaîne sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ;
            RSA. FromXmlString (sPrivateKey) ;
            octet[] octetEn = rsa. Encrypt(Encoding.UTF8.GetBytes(« a »), faux) ;
            chaîne[] sOctets = sSource.Split(',') ;



            pour (int j = 0 ; j < octets. Longueur ; j++)
            {
                si (sBytes[j] != «  »)
                {
                    octetEn[j] = Octet.analyse(sOctets[j]) ;
                }
            }
            octet[] plaintbytes = rsa. Déchiffrer (octetEn, faux) ;
            return Encoding.UTF8.GetString(plaintbytes) ;
        }
            return sbString.ToString() ;
        }





--------------------------------------------------------------------

Code source du chiffrement et du déchiffrement RSA :

utilisant System ;
utilisant System.Collections.Generic ;
utilisant System.Linq ;
en utilisant System.Text ;
utilisant System.Security.Cryptography ;

Espace de noms MyRSA
Espace de noms MyRSA

{

publicclass MyRSA

{



privatestaticstring publicKey =

    « <RSAKeyValue><Modulus>6CdsXgYOyya/yQH »+

    « TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L »+

    « wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx »+

    « PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE »+

    « /PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+

    « w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> » ;

privatestaticstring privateKey =

    « <RSAKeyValue><Modulus>6CdsXgYOyya/yQH »+

    « TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L »+

    « wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx »+

    « PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE »+

    « /PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+

    « w9YRXiac=</Modulus><Exponent>AQAB</Exponent>"+

    « <P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d"+

    « L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd »+

    « VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle"+

    « VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG"+

    « lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>"+

    « <DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU"+

    « GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te"+

    « zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY"+

    « gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA"+

    « StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>"+

    « GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn"+

    « cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4"+

    « aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D"+

    « Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ »+

    « s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40"+

    « H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry »+

    « oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue> » ;



staticpublicstring Déchiffrer (chaîne base64code)

{

    essaie

    {



        Créez un UnicodeEncoder pour convertir entre un tableau d’octets et une chaîne.

        UnicodeEncoding ByteConverter = nouveau UnicodeEncoding() ;



        Créer une nouvelle instance de RSACryptoServiceProvider pour générer

        Données à clé publique et privée.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;

        RSA. FromXmlString (privateKey) ;



        octet[] chiffredData ;

        octet[] décryptéData ;

        encryptedData = Convert.FromBase64String(base64code) ;



        Transmettez les données à DECRYPT, les informations de clé privée

        (utilisant RSACryptoServiceProvider.ExportParameters(true),

        et un drapeau booléen ne précisant pas de remplissage OAEP.

        decryptedData = RSADecrypt(

            encryptedData, RSA. ExportParameters (vrai), faux) ;



        Affichez le texte en clair déchiffré sur la console.

        return ByteConverter.GetString(decryptedData) ;

    }

    capture (exception exc)

    {

        Exceptions.LogException(exc) ;

        Console.WriteLine(exc. Message) ;

        retour » ;

    }

}



staticpublicstring Encrypt(chaîne versEncryptString)

{

    essaie

    {

        Créez un UnicodeEncoder pour convertir entre un tableau d’octets et une chaîne.

        UnicodeEncoding ByteConverter = nouveau UnicodeEncoding() ;



        Créez des baies d’octets pour contenir les données originales, chiffrées et déchiffrées.

        octet[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString) ;

        octet[] chiffredData ;

        octet[] décryptéData ;



        Créer une nouvelle instance de RSACryptoServiceProvider pour générer

        Données à clé publique et privée.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;



        RSA. FromXmlString (privateKey) ;



        Transmets les données à ENCRYPT, c’est-à-dire les informations de clé publique

        (en utilisant RSACryptoServiceProvider.ExportParameters(false),

        et un drapeau booléen ne précisant pas de remplissage OAEP.

        encryptedData = RSAEncrypt(

            dataToEncrypt, RSA. ExportParameters (faux), faux) ;



        chaîne base64code = Convert.ToBase64String(encryptedData) ;

        retourner base64code ;

    }

    capture (exception exc)

    {

        Prenez cette exception au cas où le chiffrement en aurait eu

        Pas réussi.

        Exceptions.LogException(exc) ;

        Console.WriteLine(exc. Message) ;

        retour » ;

    }







}



staticprivatebyte[] RSAEncrypt(

    octet[] DataToEncrypt,

    RSAParamètres RSAKeyInfo,

    bool DoOAEPPajout)

{

    essaie

    {

        Créez une nouvelle instance de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;



        Importez les informations de clé RSA. Il suffit de cela

        pour inclure les informations à clé publique.

        RSA. ImportParameters(RSAKeyInfo) ;



        Chiffrer le tableau d’octets passés et spécifier le remplissage OAEP.  

        Le remplissage OAEP n’est disponible que sur Microsoft Windows XP ou

        Plus tard.  

        Retourner RSA. Encrypter (DataToEncrypt, DoOAEPPadding) ;

    }

    Capturez et affichez une CryptographicException  

    vers la console.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e) ;

        Console.WriteLine(e.Message) ;



        returnnull ;

    }



}



staticprivatebyte[] RSADecrypt(

    octet[] DataToDecrypt,

    RSAParamètres RSAKeyInfo,

    bool DoOAEPPajout)

{

    essaie

    {

        Créez une nouvelle instance de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;



        Importez les informations de clé RSA. Cela doit être nécessaire

        Inclure les informations de clé privée.

        RSA. ImportParameters(RSAKeyInfo) ;



        Déchiffrez le tableau d’octets passés et spécifiez le remplissage OAEP.  

        Le remplissage OAEP n’est disponible que sur Microsoft Windows XP ou

        Plus tard.  

        Retourner RSA. Déchiffrer (DataToDecrypt, DoOAEPPadding) ;

    }

    Capturez et affichez une CryptographicException  

    vers la console.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e) ;

        Console.WriteLine(e.Message) ;



        returnnull ;

    }

}

}

}

  1. static void Main(string[] args)
  2.         {
  3.             string encodeString = MyRSA.Encrypt("1234567");
  4.             Console.WriteLine(encodeString);


  5.             string decode = MyRSA.Decrypt(encodeString);
  6.             Console.WriteLine(decode);

  7.             Console.ReadLine();
  8.         }
Code de copie






Précédent:Créez votre propre forum personnel gratuitement, vous pouvez gagner de l’argent en construisant pour vous, et vous pouvez le faire en trois minutes
Prochain:Utilisation d’onclick et href dans le tag A en HTML
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com