Jumat, 20 Maret 2015

C#-Enkripsi Pesan dengan teknik RSA



Penulis mengimplementasikan sebuah teknik kriptografi menggunakan teknik RSA untuk me enkripsikan sebuah pesan (string)





Kalkaltor RSA

Contoh penggunakan library untuk kalkulator RSA



public void CaraHitungNilaiRSA()
{
 /*penggunaan RSA sangat unik!
  * dikarenakan kita menggunakan public key dan private key
  * public key yaitu d dan N
  * private key yaitu e dan N
  * Bagaimana menentukan nilai e,d, dan N?
  * maka kita membutuhkan nilai awal
  * p,q, dan e yang nilai tersebut bilangan prima!
  * jadi pastikan dulu bilangan tersebut PRIMA!
  */
 int p = 1301;
 int q = 4001;
 int e = 98981;
 if (!Helper.IsPrime(p))
 {
  Console.WriteLine("p bukan bilangan prima!");
  return;
 }
 if (!Helper.IsPrime(q))
 {
  Console.WriteLine("q bukan bilangan prima!");
  return;
 }
 if (!Helper.IsPrime(e))
 {
  Console.WriteLine("e bukan bilangan prima!");
  return;
 }
 /*setelah semua dipastikan bilangan prima!
  * maka gunakan class RSA untuk menghitung nilai d dan N nya
  */
 RSA rsa = new RSA(p, q, e);
 Console.WriteLine("Public key \n"+
  "e : "+e.ToString()+"\n"+
  "N : "+rsa.N.ToString()
  );

 Console.WriteLine("Private key \n" +
  "d : " + rsa.D.ToString() + "\n" +
  "N : " + rsa.N.ToString()
  );
  
 /*setelah mendapatkan nilai e,d, dan N
  * maka anda siap gunakan nilai tersebut untuk melakukan proses enkripsi dan dekripsi
  * yaitu berupa nilai angka!
  */
 int nilaiAwal = 100;
 rsa.SetPublicKey(e, int.Parse(rsa.N.ToString())); //set nilai public key nya!
 int nilaiEnkripsi = rsa.DoEncrypt(nilaiAwal); //proses enkripsi!
 Console.WriteLine(nilaiAwal + " diubah " + nilaiEnkripsi);
 /* pasti nilai nya akan berbeda!
  * untuk mengubah kembali, gunakan dekripsi
  */
 rsa.SetPrivateKey(int.Parse(rsa.D.ToString()), int.Parse(rsa.N.ToString())); //set nilai public key nya!
 int nilaiDekripsi = rsa.DoDecrypt(nilaiEnkripsi);
 Console.WriteLine(nilaiEnkripsi + " diubah " + nilaiDekripsi);



}


       
 

Menghasilkan


Enkripsi RSA

Contoh penggunakan library untuk Enkripsi RSA




public void EnkripsiPesanDenganRSA()
{
 Console.WriteLine("ENKRIPSI DENGAN RSA");
 String rahasia = "ini adalah sebuah pesan rahasia!"; //pesan asli
 Console.WriteLine("\nKALIMAT AWAL :\n" + rahasia);
 int[] kodeASCII = Helper.Huruf2Angka(rahasia); // string diubah menjadi array ascii
 //set kunci public dan private
 int e = 79;
 int d = 1019;
 int N = 3337;
 RSA rsa = new RSA(); //panggil class RSA
 rsa.SetPublicKey(e, N); //tetapkan kunci RSA nya!
 int[] kodeEnkripsi = new int[kodeASCII.GetLength(0)];
 for (int i = 0; i < kodeASCII.GetLength(0); i++)
 {
  kodeEnkripsi[i] = rsa.DoEncrypt(kodeASCII[i]); //lakukan proses enkripsi satu-persatu
  
 }
 String paketKalimat = Helper.PaketKalimat(kodeEnkripsi);
 
 String kalimat = Helper.KalimatAngka2Huruf(paketKalimat);
 Console.WriteLine("\nKALIMAT HASIL ENKRIPSI :\n" + kalimat);

 /* selanjutnya proses dekripsi yaitu
  * 
  */
 int[] code2 = Helper.Huruf2Angka(kalimat); //ubah string menjadi array ascii
 paketKalimat = null;
 for (int i = 0; i < code2.GetLength(0); i++)
 {
  paketKalimat += code2[i].ToString();
 }
 //Console.WriteLine(kalimatAngka);
 
 paketKalimat = Helper.UraiPaket(paketKalimat); //urai paket kebalikan dari proses paket kalimat!
 
 String[] kalimat3 = paketKalimat.Split('#'); //gunakan tanda # untuk split
 rsa.SetPrivateKey(d, N); //tetapkan private key
 int[] kodeDekripsi = new int[kalimat3.GetLength(0) - 1];
 for (int i = 0; i < kodeDekripsi.GetLength(0); i++)
 {
  kodeDekripsi[i] = rsa.DoDecrypt(int.Parse(kalimat3[i].ToString())); //lakukan proses dekripsi satu - persatu
  
 }

 String urai = Helper.Angka2Huruf(kodeDekripsi); //ubah code ascci menjadi string
 Console.WriteLine("\nKALIMAT HASIL DEKRIPSI :\n" + urai);
}


       
 


GUI




Tidak ada komentar: