Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 18182|Jawab: 0

[Sumber] C# mengimplementasikan enkripsi dan dekripsi RSA secara rinci

[Salin tautan]
Diposting pada 04/11/2015 12.37.23 | | |
Persyaratan proyek, menghasilkan kunci pribadi dan kunci publik, mengenkripsi dengan kunci publik, mendekripsi dengan kunci pribadi, saya menerapkannya seperti ini,



Saya berharap dapat membantu teman-teman yang memiliki kebutuhan ini.







Kode sumbernya adalah sebagai berikut:



1. Hasilkan sepasang kunci:



          /// <summary>
        Hasilkan kunci pribadi dan kunci publik arr[0] untuk kunci pribadi arr[1] untuk kunci publik
        /// </summary>
        /// <returns></returns>
        string statis publik[] GenerateKeys()
        {
            string[] sKeys = String baru[2];
            RSACryptoServiceProvider rsa = RSACryptoServiceProvider baru();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString(false);
            mengembalikan sKunci;
        }



2. Enkripsi:



      /// <summary>
        Enkripsi RSA
        /// </summary>
       <param name="sSource" >String sumber</param>
        <param name="sPublicKey" >kunci publik</param>
        /// <returns></returns>
        string statis publik EncryptString(string sSource,string sPublicKey)
        {
            RSACryptoServiceProvider rsa = RSACryptoServiceProvider baru();
            string plaintext = sSumber;
            rsa. DariXmlString(sPublicKey);
            byte[] cipherbytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = rsa. Encrypt(Encoding.UTF8.GetBytes(plaintext), false);



            StringBuilder sbString = StringBuilder(); baru
            untuk (int i = 0; Saya < cipherbytes. Panjang; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Dekripsi:



  /// <summary>
        RSA Dekripsi
        /// </summary>
        <param name="sSource">String sumber</param>
        <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        string statis publik DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = RSACryptoServiceProvider baru();
            rsa. DariXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



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





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

Kode sumber enkripsi dan dekripsi RSA:

menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan System.Security.Cryptography;

ruang nama MyRSA
ruang nama MyRSA

{

MyRSA kelas publik

{



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)

{

    Coba

    {



        Buat UnicodeEncoder untuk mengonversi antara array byte dan string.

        UnicodeEncoding ByteConverter = UnicodeEncoding baru();



        Membuat instance baru RSACryptoServiceProvider untuk menghasilkan

        data kunci publik dan pribadi.

        RSACryptoServiceProvider RSA =RSACryptoServiceProvider baru();

        RSA. DariXmlString(privateKey);



        byte[] encryptedData;

        byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);



        Teruskan data ke DECRYPT, informasi kunci pribadi

        (menggunakan RSACryptoServiceProvider.ExportParameters(true),

        dan bendera boolean yang menentukan tidak ada bantalan OAEP.

        decryptedData = RSADecrypt(

            Data terenkripsi, RSA. ExportParameters(true), false);



        Tampilkan teks biasa yang didekripsi ke konsol.

        mengembalikan ByteConverter.GetString(decryptedData);

    }

    tangkap (Pengecualian exc)

    {

        Exceptions.LogException(exc);

        Konsol.WriteLine(kecuali pesan);

        kembali"";

    }

}



staticpublicstring Encrypt(string keEncryptString)

{

    Coba

    {

        Buat UnicodeEncoder untuk mengonversi antara array byte dan string.

        UnicodeEncoding ByteConverter = UnicodeEncoding baru();



        Buat array byte untuk menyimpan data asli, terenkripsi, dan didekripsi.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] decryptedData;



        Membuat instance baru RSACryptoServiceProvider untuk menghasilkan

        data kunci publik dan pribadi.

        RSACryptoServiceProvider RSA =RSACryptoServiceProvider baru();



        RSA. DariXmlString(privateKey);



        Teruskan data ke ENCRYPT, informasi kunci publik

        (menggunakan RSACryptoServiceProvider.ExportParameters(false),

        dan bendera boolean yang menentukan tidak ada bantalan OAEP.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        mengembalikan base64code;

    }

    tangkap (Pengecualian exc)

    {

        Tangkap pengecualian ini jika enkripsi melakukannya

        tidak berhasil.

        Exceptions.LogException(exc);

        Konsol.WriteLine(kecuali pesan);

        kembali"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameter RSAKeyInfo,

    bool DoOAEPPadding)

{

    Coba

    {

        Buat instans baru RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =RSACryptoServiceProvider baru();



        Impor informasi RSA Key. Ini hanya perlu

        untuk menyertakan informasi kunci publik.

        RSA. Parameter Impor (RSAKeyInfo);



        Enkripsi array byte yang dilewatkan dan tentukan bantalan OAEP.  

        Bantalan OAEP hanya tersedia di Microsoft Windows XP atau

        nanti.  

        mengembalikan RSA. Enkripsi(DataToEncrypt, DoOAEPPadding);

    }

    Menangkap dan menampilkan CryptographicException  

    ke konsol.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Pesan);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameter RSAKeyInfo,

    bool DoOAEPPadding)

{

    Coba

    {

        Buat instans baru RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =RSACryptoServiceProvider baru();



        Impor informasi RSA Key. Kebutuhan ini

        untuk menyertakan informasi kunci pribadi.

        RSA. Parameter Impor (RSAKeyInfo);



        Dekripsi array byte yang dilewati dan tentukan bantalan OAEP.  

        Bantalan OAEP hanya tersedia di Microsoft Windows XP atau

        nanti.  

        mengembalikan RSA. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Menangkap dan menampilkan CryptographicException  

    ke konsol.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Pesan);



        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.         }
Salin kode






Mantan:Bangun forum pribadi Anda sendiri secara gratis, Anda dapat menghasilkan uang dengan membangun atas nama Anda, dan Anda dapat melakukannya dalam tiga menit
Depan:Penggunaan onclick dan href di tag A di HTML
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com