Implementasi Algoritma Affine Cipher, RSA-CRT dan Alternate Unary Code Dalam Pengamanan dan Kompresi Teks

A-1

LAMPIRAN A

LISTING PROGRAM
Enkripsi Plainteks
public String enkripsi(String Pesan, int a, int b){
String Cipherteks = "";
int m;
for (int i = 0; i < Pesan.length(); i++)
{
m = (Pesan.charAt(i));
Cipherteks = Cipherteks + (char) ((a * m + b) % 256);
}
return Cipherteks;
}

Dekripsi Plainteks
public String dekripsi(String Ciphert, int a, int b){
String Plaint = "";
int aInvers = 0;

int tes, c, cb;
for (int i = 0; i < 256; i++)
{
tes = (a * i) % 256;
if (tes == 1)
{
aInvers = i;
}
}
for (int i = 0; i < Ciphert.length(); i++)
{
c = Ciphert.charAt(i);
cb = (c - b);
if (cb < 1){
cb = cb + 256;
}
Plaint = Plaint + (char)(aInvers * cb % 256);
}
return Plaint;
} }


Enkripsi - Dekripsi Kunci
public int enkripRSA_CRT(int m, Kunci k){
return (int)mm.bigMod(m, k.getE(), k.getN());
}
public int dekripsiRSA_CRT(int Cipher, Kunci k){
mP = (int) mm.bigMod(Cipher, k.getdP(), k.getP());

Universitas Sumatera Utara

A-2

mQ = (int) mm.bigMod(Cipher, k.getdQ(), k.getQ());
return crt.prosesCRT((int)mP, k.getP(), (int) mQ, k.getQ());
}

Kompresi Cipherteks
public String StringToStb(String st, String c, String[] s){
StringBuilder stb = new StringBuilder();
for (int i = 0; i < st.length(); i++) {

String z = Character.toString(st.charAt(i));
int k = c.indexOf(z);
stb.append(s[k]);
}
int x = stb.length() % 8;
int pad = 0;
if (x != 0) {
pad = 8 - x;
for (int i = 0; i < pad; i++)
stb.append("0");
}
String flag = DecToBin(pad);
int y = 8 - flag.length();
for (int i = 0; i < y; i++)
stb.append("0");
stb.append(d);
return stb.toString(); }
public byte[] BinToByteArray(String str){
int n = str.length()/8;
arrByte = new byte[n];

StringBuilder byteStr = new StringBuilder();
for(int i=0;i