LISTING PROGRAM
1.
Class keygen.cs
using System; using System.Numerics; namespace Program_Skripsi { /// <summary> /// Description of keygen. /// </summary>public class keygen {
private int prima; public keygen(int p) { this.prima = p; }
public static BigInteger bilprima(BigInteger random){ int counter=0;
for (int i=2; i<random; i++){ if(random % i == 0) counter++; }
if(counter > 0) return 0; else return random;
}
public static BigInteger gcd(BigInteger m, BigInteger n){ BigInteger r = m % n; while (r != 0){ return gcd(n,r); } return n; }
public static int kunci_eA(int prima){ Random rnd = new Random();
int key_eA = rnd.Next(2, prima-1); if (gcd(key_eA,prima-1) == 1) return key_eA; else return kunci_eA(prima); }
public static int kunci_dA(int prima, BigInteger eA){ int key_dA = 1;
BigInteger hasil = (key_dA*eA) % (prima-1); while (hasil != 1 && hasil != 0){
hasil = (key_dA*eA) % (prima-1); }
if (hasil == 0 && key_dA!=eA) return kunci_dA( prima, eA); else
return key_dA; }
public static BigInteger kunci_eB(int prima){ Random rnd2 = new Random();
BigInteger key_eB = rnd2.Next(2, prima-1); if (gcd(key_eB,prima-1)==1 ) return key_eB; else return kunci_eB(prima); }
public static int kunci_dB(int prima, int eA, int dA, BigInte ger eB){
BigInteger hasil;
int key_dB=1; if (gcd(eB,prima-1)==1 ){
hasil = (key_dB*eB) % (prima-1); while (hasil != 1 && hasil != 0){ key_dB++;
hasil = (key_dB*eB) % (prima-1); }
if (hasil
== 0 && key_dB!=eA && key_dB!=dA && key_dB!=eB)
return kunci_dB(prima, eA, dA, eB); else
return key_dB; }
else
return kunci_dB(prima, eA, dA, eB); } } }
2.
Class MO.cs
using System; using System.Collections.Generic; using System.Text; using System.Numerics; namespace Program_Skripsi { /// <summary> /// Description of mo. /// </summary> public class MO {private string teks;
{
this.teks = t; }
public static string enkripsiPlain(string plaintxt, int prima , int eA){
StringBuilder bitsplain = new StringBuilder(); StringBuilder text = new StringBuilder(); BigInteger c1x;
BigInteger
sum, sum2=1, aaa=0, hasil=0, sumx, sumx2=1; foreach (char c in plaintxt){
bitsplain.Append(c); }
BigInteger[] p = new BigInteger[bitsplain.Length]; for (int i=0; i<bitsplain.Length; i++){
p[i] = Convert.ToInt32(bitsplain[i]); c1x = (BigInteger.Pow(p[i],eA)) % (prima); text.Append(c1x); text.Append(" "); } return text.ToString(); }
public static string enkripsiC1(string C1,int prima, int eB){ string[] bitsplain = C1.Split(' ');
StringBuilder text = new StringBuilder(); BigInteger c2x;
BigInteger[] c1 = new BigInteger[bitsplain.Length]; BigInteger sum, sum2=1, aaa=0, hasil=0, sumx, sumx2=1; for (int i=0; i<bitsplain.Length-1; i++){
c1[i]=Convert.ToInt32(bitsplain[i]); c2x = (BigInteger.Pow(c1[i],eB)) % (prima); text.Append(c2x); text.Append(" "); } return text.ToString(); }
public static string dekripsiC2(string C2,int prima, int dA){ string[] bitsplain = C2.Split(' ');
StringBuilder text = new StringBuilder(); BigInteger c3x;
BigInteger[] c2 = new BigInteger[bitsplain.Length]; BigInteger sum, sum2=1, aaa=0, hasil=0, sumx, sumx2=1; for (int i=0; i<bitsplain.Length-1; i++){
c2[i]=Convert.ToInt32(bitsplain[i]); c3x = (BigInteger.Pow(c2[i],dA)) % (prima); text.Append(c3x); text.Append(" "); } return text.ToString(); }
public static string dekripsiC3(string C3,int prima, int dB){ string[] bitsplain = C3.Split(' ');
BigInteger plain;
BigInteger[] c3 = new BigInteger[bitsplain.Length]; StringBuilder sb = new StringBuilder();
BigInteger sum, sum2=1, aaa=0, hasil=0, sumx, sumx2=1; for (int i=0; i<bitsplain.Length-1; i++){
c3[i]=Convert.ToInt32(bitsplain[i]);
plain = (BigInteger.Pow(c3[i],dB)) % (prima); char asli = (char)plain;
sb.Append(asli); } return sb.ToString(); } } }
3.
Class erCode.cs
using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace Program_Skripsi { /// <summary> /// Description of Class1. /// </summary>public class erCode {
private string kalimat; public erCode(string s) { this.kalimat = s; }
static List<char> sortedChar (string kalimat
//charset
List<char> list = new List<char>(); int i=0;
foreach (char elemen in kalimat) { while (!list.Contains(elemen)){ list.Add(elemen); i++; } } //frequency
List<int> frek = new List<int>(); foreach (char elemen in list){ int hitung = 0;
foreach (char e in kalimat){ if (e == elemen)
hitung +=1; }
frek.Add(hitung); } //sorting int temp,j; char temp2;
for (int n =0; n < frek.Count; n++) {
temp = frek[n]; temp2 = list[n]; j = n - 1;
while (j >= 0 && frek[j] < temp) { frek[j + 1] = frek[j]; list[j + 1] = list[j]; j--; } frek[j + 1] = temp; list[j + 1] = temp2; } return list; }
public static string Code(int n){
StringBuilder kode = new StringBuilder(); if (n<4){
string s = Convert.ToString(n,2); for (int i = 0; i<3-s.Length; i++){ kode.Append("0"); } kode.Append(s); } else { kode.Append("0"); while (n>=4){ string st = Convert.ToString(n,2); kode.Insert(0,st); n = st.Length; } } return kode.ToString(); }
public static string kompresi (string kalimat){ List<char> srtChar = sortedChar(kalimat);
int m = 0;
string bitflag;
StringBuilder bitkom = new StringBuilder(); foreach (char c in kalimat){
bitkom.Append(Code(srtChar.IndexOf(c))); } m=0; while (bitkom.Length % 7 !=0){ bitkom.Append("0"); m++;
} if (m!=0){ bitflag = Convert.ToString(m,2); while (bitflag.Length % 7 !=0){ bitflag = "0"+bitflag; } bitkom.Append(bitflag); } else bitkom.Append("0000000");
string sbitkom = Convert.ToString(bitkom);
StringBuilder charkom = new StringBuilder(); int awal = 0;
for (int i=7; i<sbitkom.Length+7; i+=7){ int dec = Convert.ToInt32(sbitkom.Substring(awal,7), 2); char chr = (char)dec; charkom.Append(chr); awal = i; } charkom.Append("/*/");
for (int j=0; j<srtChar.Count; j++){ charkom.Append(srtChar[j]); }
return charkom.ToString(); }
public static string bitkompresi(string strkom){ string charkompresi =
strkom.Split(new [] {"/*/"}, StringSplitOptions.None)[0]; //convert char to binary
StringBuilder binn = new StringBuilder(); foreach (char c in charkompresi){
string t =
Convert.ToString(System.Convert.ToInt32(c),2); if (t.Length<=7){
for (int i = 0; i<7-t.Length; i++){
binn.Append("0"); } binn.Append(t); } else binn.Append(t); }
string bin = binn.ToString();
//remove bitflag
int bitf = Convert.ToInt32(bin.Substring(bin.Length-7),2);
if(bitf == 0)
bin = bin.Substring(0,bin.Length-7); else
return bin; }
public static string dekompresi(string strkompresi) string bin = bitkompresi(strkompresi);
string karakter =
strkompresi.Split(new [] {"/*/"}, StringSplitOptions.None)[1];
//ubah dari binari >> karakter string kode = "";
List<string> kodeER = new List<string>(); for (int y=0; y<karakter.Length; y++){ kodeER.Add(Code(y));
}
StringBuilder karasli = new StringBuilder(); foreach (char c in bin){
kode += c; if (kodeER.Contains(kode)){ karasli.Append(karakter[kodeER.IndexOf(kode)] ); kode = ""; } } return karasli.ToString(); } } }