2. Program RSA
package com.januar.tppchat.crypto;
import
java.math.BigInteger;
import java.util.Random;
public class
RSA {
public static long getPublicKey
long totien{
Random random =
new
Random;
long
e = 100
+
long
random.nextDoubletotien - 100
;
while
GeneralMath.GCDtotien, e = 1
{ e =
100 +
long random.nextDoubletotien -
100 ;
}
return
e; }
public static long
getPrivateKey
long
totien,
long
e{
return
GeneralMath.ExtendedEuclideantotien, e; }
public static long
Encrypt
long
m,
long
e,
long
n{ return GeneralMath.ModularExponentialm, e, n;
BigInteger b_m =
new
BigIntegerLong.toStringm; BigInteger b_e =
new BigIntegerLong.toStringe;
BigInteger b_n =
new
BigIntegerLong.toStringn; BigInteger result = b_m.modPowb_e,b_n;
return
Long.parseLongresult.toString; }
public static long
Decrypt
long
c,
long
d,
long
n{ return GeneralMath.ModularExponentialc, d, n;
BigInteger b_c =
new
BigIntegerLong.toStringc; BigInteger b_d =
new
BigIntegerLong.toStringd; BigInteger b_n =
new BigIntegerLong.toStringn;
BigInteger result = b_c.modPowb_d,b_n;
return Long.parseLongresult.toString;
} }
3. Program Sieve of Eratosthenes
package
com.januar.tppchat.crypto;
import
java.util.ArrayList;
import
java.util.List;
import java.util.Random;
public class
SieveofEratosthenes {
public static final int MAX
= 99999999
;
public static
ListInteger generate
int
min,
int
limit { int limit = 99999999; Batas maksimum bil. prima yang dicari
boolean [] bil_asal =
new boolean [limit];
for int
i = ; i limit; i++ {
bil_asal[i] =
true
; }
bil_asal[ ] =
false
; bilangan 0 bukan bilangan prima
bil_asal[ 1
] =
false
; bilangan 1 bukan bilangan prima
Penerapan algoritma Sieve of Erathosthenes
for int
i = 2
; i = Math.sqrtlimit; i++ {
if bil_asal[i] {
for int
j = i i; j limit; j = j + i { bil_asal[j] =
false
; }
} }
Masukkan semua bilangan prima hasil pencarian ke dalam array prima
ListInteger prima = new
ArrayListInteger;
for int
i = 2
; i limit; i++ {
if
bil_asal[i] i = min { prima.addi;
} }
System.
out .println
Jumlah bilangan prima antara + min +
sampai
+ limit +
adalah
+ prima.size +
buah
;
return prima;
}
public static ListInteger generate {
return SieveofEratosthenes.generate
2 ,
MAX ;
}
public static ListInteger generate
int limit {
return
SieveofEratosthenes.generate 2
, limit; }
public static
ListInteger generateKey { ListInteger keys =
new
ArrayListInteger; ListInteger prima = SieveofEratosthenes.generate
100 ,
10000 ;
Random random =
new
Random;
int
q = ;
int
temp = random.nextIntprima.size; keys.addprima.gettemp;
do
{ temp = random.nextIntprima.size;
q = prima.gettemp; }
while
keys.get == q;
keys.addq;
return
keys; }
public static
ListInteger generateRabinKey { ListInteger keys =
new
ArrayListInteger; ListInteger prima = SieveofEratosthenes.generate
100000 ,
1000000 ;
Random random = new
Random;
while
keys.size = 2
{
int temp = random.nextIntprima.size;
if
prima.gettemp 4
== 3
{
if
keys.containsprima.gettemp { keys.addprima.gettemp;
} }
}
return
keys; }
}
4. Program Three-Pass Protocol