Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 18182|Yanıt: 0

[Kaynak] C#, RSA şifreleme ve şifre çözmeyi ayrıntılı şekilde uygular

[Bağlantıyı kopyala]
Yayınlandı 4.11.2015 12:37:23 | | |
Proje gereksinimleri, özel ve açık anahtar oluşturmak, açık anahtarla şifrelemek, özel anahtarla şifre çözmek, bunu şöyle uyguladım,



Bu ihtiyacı olan arkadaşlarıma yardımcı olmayı umuyorum.







Kaynak kodu şöyledir:



1. Bir çift anahtar oluşturun:



          /// <summary>
        Özel anahtar için arr[1] için özel anahtar arr[0] oluştur
        /// </summary>
        /// <returns></returns>
        public static string[] GenerateKeys()
        {
            string[] sKeys = yeni String[2];
            RSACryptoServiceProvider rsa = yeni RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(doğru);
            sKeys[1] = rsa. ToXmlString(yanlış);
            return sKeys;
        }



2. Şifreleme:



      /// <summary>
        RSA Şifreleme
        /// </summary>
       <param name="sSource" >Source dizisi</param>
        <param name="sPublicKey" >public key</param>
        /// <returns></returns>
        public static string EncryptString(string sSource, string sPublicKey)
        {
            RSACryptoServiceProvider rsa = yeni RSACryptoServiceProvider();
            dizim düz metin = sKaynak;
            RSA. FromXmlString(sPublicKey);
            bayt[] şifreli baytlar;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = rsa. Encrypt(Encoding.UTF8.GetBytes(plaintext), yanlış);



            StringBuilder sbString = yeni StringBuilder();
            için (int i = 0; Şifreli baytlar <. Uzunluk; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Şifre Çözme:



  /// <summary>
        RSA Şifre Çözme
        /// </summary>
        <param name="sSource">Source string</param>
        <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        public static string DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = yeni RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            için (int j = 0; j < sBytes.Uzunluk; j++)
            {
                if (sBytes[j] != "")
                {
                    byteEn[j] = Bayt.Parse(sBytes[j]);
                }
            }
            bayt[] plaintbytes = rsa. Decrypt(byteEn, yanlış);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

RSA şifreleme ve şifre çözme kaynak kodu:

System kullanmak;
System.Collections.Generic kullanılarak;
System.Linq kullanarak;
System.Text kullanarak;
System.Security.Cryptography kullanarak;

isim alanı MyRSA
isim alanı 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)

{

    Denemek

    {



        Bayt dizisi ile dizi arasında dönüştürmek için bir UnicodeEncoder oluşturun.

        UnicodeEncoding Bayt Dönüştürücü = yeni UnicodeEncoding();



        RSACryptoServiceProvider'ın yeni bir örneğini oluşturarak oluşturuldu

        Açık ve özel anahtar verileri.

        RSACryptoServiceProvider RSA =yeni RSACryptoServiceProvider();

        RSA. FromXmlString(özel Anahtar);



        byte[] encryptedData;

        byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);



        Veriyi özel anahtar bilgisi olan DECRYPT'e geçirin

        (RSACryptoServiceProvider.ExportParameters(true) kullanılarak,

        ve OAEP doldurma belirtmeyen bir boolean bayrağı.

        decryptedData = RSADecrypt(

            encryptedData, RSA. ExportParameters(doğru), yanlış);



        Şifresi çözülmüş düz metni konsola gösterin.

        ByteConverter.GetString(decryptedData) geri döner;

    }

    yakalama (İstisna örneği)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mesaj);

        return"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Denemek

    {

        Bayt dizisi ile dizi arasında dönüştürmek için bir UnicodeEncoder oluşturun.

        UnicodeEncoding Bayt Dönüştürücü = yeni UnicodeEncoding();



        Orijinal, şifrelenmiş ve çözülmüş verileri tutmak için bayt dizileri oluşturun.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] decryptedData;



        RSACryptoServiceProvider'ın yeni bir örneğini oluşturarak oluşturuldu

        Açık ve özel anahtar verileri.

        RSACryptoServiceProvider RSA =yeni RSACryptoServiceProvider();



        RSA. FromXmlString(özel Anahtar);



        Veriyi ENCRYPT'e, yani açık anahtar bilgisine geçirin

        (RSACryptoServiceProvider.ExportParameters(false) kullanılarak,

        ve OAEP doldurma belirtmeyen bir boolean bayrağı.

        encryptedData = RSAEncrypt(

            dataToEncrypt, RSA. ExportParameters(yanlış), yanlış);



        dizi base64code = Convert.ToBase64String(encryptedData);

        base 64code'u geri döndürmek;

    }

    yakalama (İstisna örneği)

    {

        Şifreleme varsa bu istisnayı yakalayın

        başarılı olmadı.

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mesaj);

        return"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Denemek

    {

        RSACryptoServiceProvider'ın yeni bir örneği oluşturun.

        RSACryptoServiceProvider RSA =yeni RSACryptoServiceProvider();



        RSA Anahtar bilgilerini içe aktarın. Bunun sadece ihtiyacı var

        kamu anahtar bilgilerini dahil etmek için.

        RSA. ImportParameters(RSAKeyInfo);



        Geçilen bayt dizisini şifreleyin ve OAEP padding'i belirtin.  

        OAEP dolgusu yalnızca Microsoft Windows XP veya

        Sonra.  

        RSA'yı geri getir. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Bir Kriptografik İstisna'yı yakalayın ve gösterin  

    konsola.

    yakalama (Kriptografik İstisna e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Denemek

    {

        RSACryptoServiceProvider'ın yeni bir örneği oluşturun.

        RSACryptoServiceProvider RSA =yeni RSACryptoServiceProvider();



        RSA Anahtar bilgilerini içe aktarın. Bunun için ihtiyaç var

        özel anahtar bilgilerini de dahil etmek için.

        RSA. ImportParameters(RSAKeyInfo);



        Geçilen bayt diziyi şifre altına alın ve OAEP padding'i belirtin.  

        OAEP dolgusu yalnızca Microsoft Windows XP veya

        Sonra.  

        RSA'yı geri getir. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Bir Kriptografik İstisna'yı yakalayın ve gösterin  

    konsola.

    yakalama (Kriptografik İstisna 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.         }
Kopya kodu






Önceki:Kendi kişisel forumunuzu ücretsiz oluşturun, kendi adınıza inşa ederek para kazanabilirsiniz ve bunu üç dakikada yapabilirsiniz
Önümüzdeki:HTML'de A etiketinde onclick ve href kullanımı
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com