|
|
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;
}
}
}
}
- static void Main(string[] args)
- {
- string encodeString = MyRSA.Encrypt("1234567");
- Console.WriteLine(encodeString);
- string decode = MyRSA.Decrypt(encodeString);
- Console.WriteLine(decode);
- Console.ReadLine();
- }
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ı
|