Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 18182|Odpowiedź: 0

[Źródło] C# szczegółowo implementuje szyfrowanie i deszyfrowanie RSA

[Skopiuj link]
Opublikowano 04.11.2015 12:37:23 | | |
Wymagania projektu: wygeneruj klucz prywatny i klucz publiczny, szyfruj kluczem publicznym, odszyfruj kluczem prywatnym, zaimplementowałem to tak,



Mam nadzieję, że będę mógł pomóc przyjaciołom, którzy mają taką potrzebę.







Kod źródłowy przedstawia się następująco:



1. Wygeneruj parę kluczy:



          /// <summary>
        Generuj klucz prywatny i klucz publiczny ARR[0] dla klucza prywatnego ARR[1] dla klucza publicznego
        /// </summary>
        /// <returns></returns>
        publiczny ciąg statyczny[] GenerateKeys()
        {
            string[] sKeys = nowy String[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString(false);
            return sKeys;
        }



2. Szyfrowanie:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <nazwa parametru="sSource" >Ciąg źródłowy</param>
        <nazwa parametru="sPublicKey" >klucz publiczny</param>
        /// <returns></returns>
        publiczny ciąg statyczny EncryptString(string sSource, string sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            tekst jawny ciągu = sŹródło;
            RSA. FromXmlString(sPublicKey);
            bajtów[] szyfrów;
            bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(tekst jawny), false);



            StringBuilder sbString = nowy StringBuilder();
            dla (int i = 0; Mam < Cipherbytes. Długość; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Deszyfrowanie:



  /// <summary>
        /// RSA Decrypt
        /// </summary>
        <nazwa parametru="sSource">Ciąg źródłowy</param>
        <nazwa parametru="sPrivateKey">Klucz prywatny</param>
        /// <returns></returns>
        publiczny statyczny ciąg DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            dla (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();
        }





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

Kod źródłowy szyfrowania i deszyfrowania RSA:

z wykorzystaniem System;
używając System.Collections.Generic;
używając System.Linq;
używając System.Text;
wykorzystując System.Security.Cryptography;

przestrzeń nazw MyRSA
przestrzeń nazw 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)

{

    spróbuj

    {



        Stwórz UnicodeEncoder do konwersji między tablicą bajtową a ciągiem znaków.

        UnicodeEncoding ByteConverter = nowy UnicodeEncoding();



        Stwórz nową instancję RSACryptoServiceProvider do generowania

        Dane klucza publicznego i prywatnego.

        RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();

        RSA. FromXmlString(privateKey);



        bajt[] encryptedData;

        bajt[] decryptedData;

        encryptedData = Convert.FromFromBase64String(base64code);



        Przekaż dane do DECRYPT, czyli informacji klucza prywatnego

        (używając RSACryptoServiceProvider.ExportParameters(true),

        oraz flagę boole'a bez wypełnienia OAEP.

        decryptedData = RSADecrypt(

            zaszyfrowane dane, RSA. ExportParameters(true), false);



        Wyświetlaj odszyfrowany tekst jawny konsoli.

        return ByteConverter.GetString(decryptedData);

    }

    catch (Exception exc)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(ok. Message);

        powrót"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    spróbuj

    {

        Stwórz UnicodeEncoder do konwersji między tablicą bajtową a ciągiem znaków.

        UnicodeEncoding ByteConverter = nowy UnicodeEncoding();



        Tworz tablice bajtów do przechowywania oryginalnych, zaszyfrowanych i odszyfrowanych danych.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        bajt[] encryptedData;

        bajt[] decryptedData;



        Stwórz nową instancję RSACryptoServiceProvider do generowania

        Dane klucza publicznego i prywatnego.

        RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();



        RSA. FromXmlString(privateKey);



        Przekaż dane do ENCRYPT, czyli informacji klucza publicznego

        (używając RSACryptoServiceProvider.ExportParameters(false),

        oraz flagę boole'a bez wypełnienia OAEP.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        zwróć base64code;

    }

    catch (Exception exc)

    {

        Złap ten wyjątek, jeśli szyfrowanie to zrobiło

        nie odnieść sukcesu.

        Exceptions.LogException(exc);

        Console.WriteLine(ok. Message);

        powrót"";

    }







}



staticprivatebyte[] RSAEncrypt(

    bajt[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    spróbuj

    {

        Stwórz nową instancję RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();



        Zaimportuj informacje o kluczu RSA. To wystarczy

        aby uwzględnić informacje o kluczu publicznym.

        RSA. ImportParameters(RSAKeyInfo);



        Zaszyfruj przekazaną tablicę bajtów i określ OAEP padding.  

        Wypełnienie OAEP jest dostępne tylko na Microsoft Windows XP lub

        Później.  

        zwróć RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Złap i wyświetl CryptographicException  

    do konsoli.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    bajt[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    spróbuj

    {

        Stwórz nową instancję RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = nowy RSACryptoServiceProvider();



        Zaimportuj informacje o kluczu RSA. To potrzeba

        aby uwzględnić informacje o kluczu prywatnym.

        RSA. ImportParameters(RSAKeyInfo);



        Odszyfruj przekazaną tablicę bajtów i określ OAEP padding.  

        Wypełnienie OAEP jest dostępne tylko na Microsoft Windows XP lub

        Później.  

        zwróć RSA. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Złap i wyświetl CryptographicException  

    do konsoli.

    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.         }
Skopiuj kod






Poprzedni:Zbuduj własne forum za darmo, możesz zarabiać, budując na swoją korzyść, i zrobisz to w trzy minuty
Następny:Użycie onclick i href w znaczniku A w HTML
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com