You are on page 1of 4

/*

* To change this template, choose Tools | Templates


* and open the template in the editor.
*/
package rsa;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
//import java.math.MathContext;
/**
*
* @author saintloki94
*/
public class RSA {

static BufferedReader s = new BufferedReader(new InputStreamReader(System.i
n));
static int p, q, n, totientN;
static int Kd=0, Ke=0;

public static void main(String[] args) {
//Input

String inputP = null;
String inputQ = null;

try {
System.out.print("Masukan nilai p: ");
inputP = s.readLine();
} catch (IOException ex) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, ex);
}
try {
System.out.print("Masukan nilai q: ");
inputQ = s.readLine();
} catch (IOException ex) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, ex);
}
//

//Ubah input string ke int


p = Integer.parseInt(inputP);
q = Integer.parseInt(inputQ);
n = p * q;
totientN = ((p-1)*(q-1));
//

//arrayTotientN
int[] array;
array = new int[(totientN)];

for(int i=1; i<=totientN; i++){
array[i-1] = i;
}
//

//cari FPB
int tmp1, tmp2, FPB=0;
int[] arrayFPB;
arrayFPB = new int[totientN];

for(int i=1; i<=totientN; i++){
for(int j=1; j<=totientN; j++){
tmp1 = array[i-1]%j;
tmp2 = array[totientN-1]%j;
if(tmp1==tmp2 && tmp1==0 && tmp2==0){
FPB=j;
}
}
arrayFPB[i-1] = FPB;
//System.out.print(arrayFPB[i-1]+", ");
}
//

//menentukan Kd (random)
int panjangGcd=0;

for(int i=1; i<=totientN; i++){
if(arrayFPB[i-1]==1){
panjangGcd+=1;
}
}

int random = (int) (1+(Math.random()*(panjangGcd)));
//System.out.println("\nNilai random1: "+random);

//random= Math.round(random);
//System.out.println("Nilai random2: "+random);

double cek=0;

for(int i=1; i<=totientN; i++){
if(arrayFPB[i-1]==1){
cek+=1;
if(arrayFPB[i-1]==1&&cek==random){
Kd=i;
break;
}
}
}

//Kd=13;
System.out.println("Nilai Kd: "+Kd);
//

//menentukan Ke
int tmp3;

for(int i=1; i<=totientN; i++){
tmp3 = (Kd*array[i-1])%totientN;
//System.out.print(tmp3+", ");
if(tmp3==1){
Ke=array[i-1];
break;
}
}

//Ke=17;
System.out.println("\nNilai Ke: "+Ke);
//

Pilihan();

}

static void Pilihan(){
//pilihan
String inputPil=null;
try {
System.out.println("\nPilihan: ");
System.out.println("1. Enkripsi: ");
System.out.println("2. Dekripsi: ");
System.out.print("Pilih: ");
inputPil = s.readLine();
} catch (IOException ex) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, ex);
}
//

//Ubah input string ke int
int pil;

pil = Integer.parseInt(inputPil);
//
if(pil==1){
Enkripsi();
} else if(pil==2){
Dekripsi();
} else{
System.out.print("Keluar");
}
//
}

static void Enkripsi(){
//input M
String inputM=null;

System.out.println("-----ENKRIPSI-----");

try {
System.out.print("Masukan nilai M: ");
inputM = s.readLine();
} catch (IOException ex) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, ex);
}
//

//Ubah input string ke int
int m;

m = Integer.parseInt(inputM);
//

//Enkripsi
long c, c2;

c = ((long) Math.pow(m, Ke));
c2 = c%n;
//System.out.println(c);
System.out.println("Jadi nilai C: "+c2);
//

Pilihan();
}

static void Dekripsi(){
//input C
String inputC=null;

System.out.println("-----DEKRIPSI-----");

try {
System.out.print("Masukan nilai C: ");
inputC = s.readLine();
} catch (IOException ex) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, ex);
}
//

//Ubah input string ke int
int c;

c = Integer.parseInt(inputC);
//

//Enkripsi
long m, m2;

m = ((long) Math.pow(c, Kd));
m2 = m%n;
//System.out.println(m);
System.out.println("Jadi nilai M: "+m2);
//

Pilihan();
}
}

You might also like