|
|
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;
}
}
}
}
- static void Main(string[] args)
- {
- string encodeString = MyRSA.Encrypt("1234567");
- Console.WriteLine(encodeString);
- string decode = MyRSA.Decrypt(encodeString);
- Console.WriteLine(decode);
- Console.ReadLine();
- }
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 menitDepan:Penggunaan onclick dan href di tag A di HTML
|