Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 18182|Odpověď: 0

[Zdroj] C# podrobně implementuje šifrování a dešifrování RSA

[Kopírovat odkaz]
Zveřejněno 04.11.2015 12:37:23 | | |
Požadavky projektu: generovat soukromý klíč a veřejný klíč, šifrovat veřejným klíčem, dešifrovat soukromým klíčem, implementoval jsem to takto,



Doufám, že mohu pomoci přátelům, kteří to potřebují.







Zdrojový kód je následující:



1. Vygenerujte dvojici klíčů:



          /// <summary>
        Generujte soukromý klíč a veřejný klíč ARR[0] pro privátní klíč[1] pro veřejný klíč
        /// </summary>
        /// <returns></returns>
        public static string[] GenerateKeys()
        {
            string[] sKeys = nový String[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString(false);
            return sKeys;
        }



2. Šifrování:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <název parametru="sSource" >Zdrojový řetězec</param>
        <název parametru="sPublicKey" >veřejný klíč</param>
        /// <returns></returns>
        public static string EncryptString(string sSource, string sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            řetězec otevřený text = sSource;
            RSA. FromXmlString(sPublicKey);
            bajty[] šifrové bajty;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(otevřený text), false);



            StringBuilder sbString = nový StringBuilder();
            pro (int i = 0; Já < šifrové bajty. Délka; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Dešifrování:



  /// <summary>
        /// RSA Decrypt
        /// </summary>
        <název parametru="sSource">Zdrojový řetězec</param>
        <název parametru="sPrivateKey">Private Key</param>
        /// <returns></returns>
        public static string DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            pro (int j = 0; j < sBytes.Length; j++)
            {
                if (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa. Decrypt(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

Zdrojový kód šifrování a dešifrování RSA:

pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí System.Security.Cryptography;

jmenný prostor MyRSA
jmenný prostor 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 Decrypt(string base64code)

{

    zkus

    {



        Vytvořte UnicodeEncoder pro převod mezi bajtovým polem a řetězcem.

        UnicodeEncoding ByteConverter = nový UnicodeEncoding();



        Vytvořte novou instanci RSACryptoServiceProvider pro generování

        Veřejná a soukromá klíčová data.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString(privateKey);



        byte[] encryptedData;

        byte[] dešifrovaná Data;

        encryptedData = Convert.FromBase64String(base64code);



        Předat data do DECRYPT, tedy informace o soukromém klíči

        (pomocí RSACryptoServiceProvider.ExportParameters(true),

        a booleovskou vlajku bez OAEP vycpávky.

        decryptedData = RSADecrypt(

            encryptedData, RSA. ExportParameters(true), false);



        Zobrazit dešifrovaný otevřený text konzoli.

        return ByteConverter.GetString(decryptedData);

    }

    chytit (Výjimka exc)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(např. Message);

        návrat"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    zkus

    {

        Vytvořte UnicodeEncoder pro převod mezi bajtovým polem a řetězcem.

        UnicodeEncoding ByteConverter = nový UnicodeEncoding();



        Vytvořte bajtová pole pro uložení originálních, šifrovaných a dešifrovaných dat.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] dešifrovaná Data;



        Vytvořte novou instanci RSACryptoServiceProvider pro generování

        Veřejná a soukromá klíčová data.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString(privateKey);



        Předání dat do systému ENCRYPT, což je informace o veřejném klíči

        (pomocí RSACryptoServiceProvider.ExportParameters(false),

        a booleovskou vlajku bez OAEP vycpávky.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        vrátit base64code;

    }

    chytit (Výjimka exc)

    {

        Chyťte tuto výjimku, pokud šifrování ano.

        neuspěl.

        Exceptions.LogException(exc);

        Console.WriteLine(např. Message);

        návrat"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    zkus

    {

        Vytvořte novou instanci RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importujte informace o RSA klíči. Stačí to

        aby zahrnul informace o veřejném klíči.

        RSA. ImportParameters(RSAKeyInfo);



        Zašifrujte pole předaných bajtů a specifikujte OAEP vyplňování.  

        OAEP polstrování je dostupné pouze na Microsoft Windows XP nebo

        Později.  

        Vraťte RSA. Encrypt(DataToEncrypting, DoOAEPPadding);

    }

    Chyťte a zobrazit CryptographicException  

    ke konzoli.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    zkus

    {

        Vytvořte novou instanci RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importujte informace o RSA klíči. To potřebuje

        aby zahrnul informace o soukromém klíči.

        RSA. ImportParameters(RSAKeyInfo);



        Dešifrujte pole předaných bajtů a specifikujte OAEP vyplňování.  

        OAEP polstrování je dostupné pouze na Microsoft Windows XP nebo

        Později.  

        Vraťte RSA. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Chyťte a zobrazit CryptographicException  

    ke konzoli.

    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.         }
Kopírovat kód






Předchozí:Vytvořte si vlastní osobní fórum zdarma, můžete vydělávat peníze tím, že budete stavět za vás, a zvládnete to za tři minuty
Další:Použití onclick a href v tagu A v HTML
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com