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(); }
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)
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");
}
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(); }