lampiran a : listing program primegenerator.java

22
LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java package tandatangandigital; import java.math.*; import java.util.*; public class PrimeGenerator { BigInteger TWO = BigInteger.ONE.add(BigInteger.ONE); BigInteger Zero = BigInteger.ZERO; BigInteger minus = new BigInteger("-1"); // fungsi ini digunakan untuk mendapatkan numbits untuk // mencari bilangan prima pada bigInteger public int GetNumbit(int panjangDigitPrima) { int numbits = 0; BigInteger TwoValue = new BigInteger("2"); BigInteger resultRandomNumber; //cek panjang digit prima //apabila nilai random number sama dengan panjang digit prima, maka // nilai numbit = randomnumbit //ini digunakan untuk menentukan distribusi nilai pada Biginteger random boolean cekNumbit = false; while(!cekNumbit) { Random rand = new Random(); int randNumbits = rand.nextInt(332); //332 = panjangnya 100 digit //perhitungan distribusi nilai pada BigInteger = 2 ^ // numbits -1 resultRandomNumber = (TwoValue.pow(randNumbits)).subtract(BigInteger.ONE); if(String.valueOf(resultRandomNumber).length() == panjangDigitPrima) Universitas Sumatera Utara

Upload: ngongoc

Post on 12-Jan-2017

240 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

LAMPIRAN A : LISTING PROGRAM

PrimeGenerator.java

package tandatangandigital;

import java.math.*;

import java.util.*;

public class PrimeGenerator {

BigInteger TWO = BigInteger.ONE.add(BigInteger.ONE);

BigInteger Zero = BigInteger.ZERO;

BigInteger minus = new BigInteger("-1");

// fungsi ini digunakan untuk mendapatkan numbits untuk

// mencari bilangan prima pada bigInteger

public int GetNumbit(int panjangDigitPrima)

{

int numbits = 0;

BigInteger TwoValue = new BigInteger("2");

BigInteger resultRandomNumber;

//cek panjang digit prima

//apabila nilai random number sama dengan panjang digit prima, maka

// nilai numbit = randomnumbit

//ini digunakan untuk menentukan distribusi nilai pada Biginteger

random

boolean cekNumbit = false;

while(!cekNumbit)

{

Random rand = new Random();

int randNumbits = rand.nextInt(332);

//332 = panjangnya 100 digit

//perhitungan distribusi nilai pada BigInteger = 2 ^

// numbits -1

resultRandomNumber =

(TwoValue.pow(randNumbits)).subtract(BigInteger.ONE);

if(String.valueOf(resultRandomNumber).length() ==

panjangDigitPrima)

Universitas Sumatera Utara

Page 2: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

{

cekNumbit = true;

numbits = randNumbits;

}

return numbits;

}

public BigInteger getPrima (int panjangDigitPrima, int

numbits) {

BigInteger pangkat,Legendre,s;

BigInteger bilPrima = BigInteger.ONE;

boolean prime;

prime = false;

String strbilPrima;

Random rand = new Random();

while (prime==false || (String.valueOf(bilPrima).

length() != panjangDigitPrima))

{

bilPrima = new BigInteger(numbits, rand);

if (bilPrima.mod(TWO) != BigInteger.ZERO;

strbilPrima = String.valueOf(bilPrima);

BigInteger acak = TWO;

int nPrimaDigit = strbilPrima.length();

int count = 0;

for (int i=0; i <nPrimaDigit; i++){

acak = acak.add(BigInteger.ONE);

pangkat =(bilPrima.subtract(BigInteger.ONE)).

divide(TWO);

Legendre = acak.modPow(pangkat, bilPrima);

}

}

if(count == nPrimaDigit) {

prime = true;

}

Universitas Sumatera Utara

Page 3: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

}

else{

//reset nilai prime ke false

prime = false;

}

}

return bilPrima;

}

}

RSA.Java

package tandatangandigital;

import java.math.*;

import java.util.*;

public class RSA {

BigInteger TWO = new BigInteger("2");

BigInteger minus = (BigInteger.ONE).subtract(TWO);

// mencari perkalian 2 bilangan prima p dan q

//

public BigInteger cariN (BigInteger p, BigInteger q) {

BigInteger n;

n=p.multiply(q);

System.out.println(n);

return n;

}

// cari nilai phi, dimana phi = (p-1)(q-1)

public BigInteger cariNilaiphi(BigInteger p, BigInteger q) {

Universitas Sumatera Utara

Page 4: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

BigInteger phi;

phi =

((p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInt

eger.ONE)));

return phi;

}

// Cari nilai kunci, dimana gcd(e,phi) = 1

public BigInteger getPublickey (BigInteger n,BigInteger p,

BigInteger q, BigInteger phi) {

BigInteger e,nilaiGCD;

Random rand = new Random();

e = BigInteger.probablePrime(n.bitLength()/2, rand);

// nilaiGCD = this.cariGCD(e, phi);

while (phi.gcd(e).intValue() != 1 ) {

e = BigInteger.probablePrime(n.bitLength()/2, rand);

}

return e;

}

// Cari nilai kunci privat, dimana d = e (pangkat -1) mod (phi)

public BigInteger getPrivatekey (BigInteger e, BigInteger phi) {

BigInteger d;

d = e.modInverse(phi);

return d;

}

// Method untuk mengubah character ke Number ASCII

public String characterToASCII(String str){

String cod;

Universitas Sumatera Utara

Page 5: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

String number="";

for(int i = 0; i < str.length(); i++)

{

char c = str.charAt(i);

int j = (int) c;

cod = String.valueOf(j);

if (cod.length()==2) {

cod = "0"+cod;

}

number += cod;

}

System.out.println("nilai ascii : "+number);

return number;

}

// Method untuk enkripsi pesan, cipherteks = pesan (pangkat d)

mod n

public String enkripsi (String code, BigInteger d, BigInteger n)

{

BigInteger hasil;

double panjang = code.length();

int pjgcode = (int) panjang;

int m;

String cipherNumber ="";

//String strN = String.valueOf(n);

int panjangN = (String.valueOf(n)).length();

String [] pesan = new String[(code.length())];

System.out.println("nilai panjang pesan :"+pjgcode);

System.out.println("nilai panjang n : "+panjangN);

if (pjgcode < panjangN) {

BigInteger cod = new BigInteger (code);

hasil = cod.modPow(d, n);

System.out.println("nilai hasil enkripsi ="+hasil+"dari

nilai :"+cod+"pangkat dari"+d+"modulo dari "+n);

String hsil =String.valueOf(hasil);

Universitas Sumatera Utara

Page 6: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

cipherNumber = hsil;

}

else {

m = panjangN-1; // nilai

m < n, maka, m = panjangN-1

int awal = 0;

int akhir = 0;

int banyakBlokCode = (int) (Math.ceil(panjang / m));

for (int i = 0; i < banyakBlokCode; i++) {

awal = i * m ;

akhir = awal + m;

if (akhir > code.length()) {

akhir = code.length();

}

pesan[i] = code.substring(awal, akhir);

BigInteger s = new BigInteger(pesan[i]);

hasil = s.modPow(d, n);

String []b = new String[(panjangN)];

String hsil = String.valueOf(hasil);

if (hsil.length() < panjangN)

{

int selisih = panjangN-hsil.length();

for (int k=0; k < selisih; k++) {

hsil ='0'+hsil;

}

}

cipherNumber +=hsil;

}

}

return cipherNumber;

}

Universitas Sumatera Utara

Page 7: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

// Method untuk mengubah ciphernumber ke bentuk heksa desimal

public String cipherNumberToHeksa(String cipherNumber){

String heksa = new String();

String [] psan = new String[cipherNumber.length()];

String cipherteks="";

if (cipherNumber.length() % 2 != 0) {

cipherNumber = "0"+cipherNumber;

}

int blokPesan = cipherNumber.length() / 2;

int awal = 0;

int akhir = 2;

for(int i=0; i < blokPesan; i++) {

awal = i*2;

akhir = awal+2;

psan[i] =cipherNumber.substring(awal,akhir);

Integer b = Integer.parseInt(psan[i]);

heksa = Integer.toHexString(b);

if(heksa.length() == 1)

{

heksa = "0"+heksa;

}

cipherteks +=heksa;

System.out.println("hasil dari cipher heksa :"

+cipherteks);

}

return cipherteks;

}

public String cipherteksToCiphernumber (String heksa,BigInteger n,

int panjangPlainteksASCII) {

String N = String.valueOf(n);

String ciphernumber="";

String ciphernumberBaru;

int b;

String [] number = new String[heksa.length()];

Universitas Sumatera Utara

Page 8: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

String cipher;

int blokPesan = heksa.length() / 2;

int awal = 0;

int akhir =2;

for(int i=0; i<blokPesan; i++) {

awal = i*2;

akhir = awal+2;

if(akhir>heksa.length()) {

akhir = heksa.length();

}

number[i] =heksa.substring(awal,akhir);

b = Integer.parseInt(number[i],16);

cipher = String.valueOf(b);

if (cipher.length() ==1) {

cipher = "0"+cipher;

}

ciphernumber +=cipher;

}

if (ciphernumber.length()% N.length() ==1) {

ciphernumberBaru

=ciphernumber.substring(1,ciphernumber.length());

ciphernumber = ciphernumberBaru;

System.out.println("hasil dari ciphernumber :"

+ciphernumber);

}

return ciphernumber;

}

public String dekripsi(String ciphernumber, BigInteger e,

BigInteger n, int panjangPlainteksASCII) {

BigInteger hasil;

Universitas Sumatera Utara

Page 9: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

String nilaiN = String.valueOf(n);

double panjang = ciphernumber.length();

int a = (int) panjang;

String [] psan = new String[a];

int blokPesan = (int) (Math.ceil(panjang/nilaiN.length()));

int awal = 0;

int akhir =nilaiN.length();

String ciphernumberBaru;

String ascii="";

if (ciphernumber.length() <= nilaiN.length())

{

BigInteger decimal = new BigInteger(ciphernumber);

String addString="";

hasil = decimal.modPow(e, n);

ascii+=hasil;

if (ascii.length() < panjangPlainteksASCII) {

int selisih = panjangPlainteksASCII - ascii.length();

for (int j = 1 ; j <= selisih ; j++)

{

addString +="0";

}

ascii = addString + ascii;

}

System.out.println("nilai ascii ="+ascii);

}

else {

for(int i = 0; i < blokPesan; i++) {

awal = i*nilaiN.length();

akhir = awal+nilaiN.length();

if (akhir > ciphernumber.length()) {

akhir = ciphernumber.length();

}

Universitas Sumatera Utara

Page 10: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

psan[i] = ciphernumber.substring(awal,akhir);

System.out.println("nilai array pesan " +psan[i]);

BigInteger decimal = new BigInteger (psan[i]);

hasil = decimal.modPow(e, n);

System.out.println("hasil dekripsi :" +hasil);//

dekripsi pesan

String hasilDekripsi = String.valueOf(hasil);

//Logic untuk mengecek panjang satu blok apa sudah

valid atau belum dengan panjang plainteks ascii semula

int currentLengthText = (nilaiN.length()-1) +

ascii.length();

System.out.println(String.valueOf(currentLengthText));

if (currentLengthText <= panjangPlainteksASCII)

{

if(hasilDekripsi.length() < (nilaiN.length()-1))

{

int selisih = nilaiN.length() -

hasilDekripsi.length() - 1;

String addString = "";

for (int j = 1 ; j <= selisih ; j++)

{

addString +="0";

}

hasilDekripsi = addString + hasilDekripsi;

}

}

else

{

int sisaTeks = panjangPlainteksASCII -

ascii.length();

int selisih = sisaTeks - hasilDekripsi.length();

String addString = "";

System.out.println("addString :"+addString);

for (int j = 1 ; j <= selisih ; j++)

{

addString +="0";

Universitas Sumatera Utara

Page 11: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

}

hasilDekripsi = addString + hasilDekripsi;

}

ascii +=hasilDekripsi;

}

}

return ascii;

}

public String plainteksASCIIToPlainteksString(String ascii) {

StringBuilder sb= new StringBuilder();

int awal =0;

int blok = ascii.length() / 3;

int akhir = 0;

String[] pesan = new String [(ascii.length())];

//mengubah number ASCII ke character

if(ascii.length()< 3) {

sb.append((char)Integer.parseInt(ascii));

}

else {

for (int i=0; i < blok; i++) {

awal = i*3;

akhir = awal+3;

if (akhir > ascii.length()) {

akhir = ascii.length();

}

pesan[i] = ascii.substring(awal,akhir);

int plainteks = Integer.parseInt(pesan[i]);

sb.append((char) plainteks);

System.out.println("pesan asli" +sb.toString());

}

}

return sb.toString();

Universitas Sumatera Utara

Page 12: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

}

}

Universitas Sumatera Utara

Page 13: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

LAMPIRAN B : TABEL ASCII DAN HEKSA DESIMAL

ASCII Decimal Hexadecimal

Null 0 0

start of header 1 1

start of text 2 2

end of text 3 3

end of transmission 4 4

Enquire 5 5

Acknowledge 6 6

Bell 7 7

Backspace 8 8

horizontal tab 9 9

Linefeed 10 A

vertical tab 11 B

form feed 12 C

carriage return 13 D

shift out 14 E

shift in 15 F

data link escape 16 10

device control 1/Xon 17 11

device control 2 18 12

19 13

20 14

21 15

22 16

23 17

24 18

25 19

Universitas Sumatera Utara

Page 14: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

26 1A

27 1B

file separator 28 1C

group separator 29 1D

record separator 30 1E

unit separator 31 1F

Space 32 20

! 33 21

" 34 22

# 35 23

$ 36 24

% 37 25

& 38 26

' 39 27

( 40 28

) 41 29

* 42 2A

+ 43 2B

, 44 2C

- 45 2D

. 46 2E

/ 47 2F

0 48 30

1 49 31

2 50 32

3 51 33

4 52 34

5 53 35

6 54 36

Universitas Sumatera Utara

Page 15: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

7 55 37

8 56 38

9 57 39

: 58 3A

; 59 3B

< 60 3C

= 61 3D

> 62 3E

? 63 3F

@ 64 40

A 65 41

B 66 42

C 67 43

D 68 44

E 69 45

F 70 46

G 71 47

H 72 48

I 73 49

J 74 4A

K 75 4B

L 76 4C

M 77 4D

N 78 4E

O 79 4F

P 80 50

Q 81 51

R 82 52

S 83 53

Universitas Sumatera Utara

Page 16: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

T 84 54

U 85 55

V 86 56

W 87 57

X 88 58

Y 89 59

Z 90 5A

[ 91 5B

\ 92 5C

] 93 5D

^ 94 5E

_ 95 5F

` 96 60

a 97 61

b 98 62

c 99 63

d 100 64

e 101 65

f 102 66

g 103 67

h 104 68

i 105 69

j 106 6A

k 107 6B

l 108 6C

m 109 6D

n 110 6E

o 111 6F

p 112 70

Universitas Sumatera Utara

Page 17: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

q 113 71

r 114 72

s 115 73

t 116 74

u 117 75

v 118 76

w 119 77

x 120 78

y 121 79

z 122 7A

{ 123 7B

| 124 7C

} 125 7D

~ 126 7E

127 7F

128 80

129 81

130 82

131 83

132 84

133 85

134 86

135 87

136 88

137 89

138 8A

139 8B

140 8C

141 8D

Universitas Sumatera Utara

Page 18: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

142 8E

143 8F

144 90

145 91

146 92

147 93

148 94

149 95

150 96

151 97

152 98

153 99

154 9A

155 9B

156 9C

157 9D

158 9E

159 9F

160 A0

¡ 161 A1

¢ 162 A2

£ 163 A3

¤ 164 A4

¥ 165 A5

¦ 166 A6

§ 167 A7

¨ 168 A8

© 169 A9

ª 170 AA

Universitas Sumatera Utara

Page 19: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

« 171 AB

¬ 172 AC

- 173 AD

® 174 AE

¯ 175 AF

° 176 B0

± 177 B1

² 178 B2

³ 179 B3

´ 180 B4

µ 181 B5

¶ 182 B6

· 183 B7

¸ 184 B8

¹ 185 B9

º 186 BA

» 187 BB

¼ 188 BC

½ 189 BD

¾ 190 BE

¿ 191 BF

À 192 C0

Á 193 C1

 194 C2

à 195 C3

Ä 196 C4

Å 197 C5

Æ 198 C6

Ç 199 C7

Universitas Sumatera Utara

Page 20: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

È 200 C8

É 201 C9

Ê 202 CA

Ë 203 CB

Ì 204 CC

Í 205 CD

Î 206 CE

Ï 207 CF

Ð 208 D0

Ñ 209 D1

Ò 210 D2

Ó 211 D3

Ô 212 D4

Õ 213 D5

Ö 214 D6

× 215 D7

Ø 216 D8

Ù 217 D9

Ú 218 DA

Û 219 DB

Ü 220 DC

Ý 221 DD

Þ 222 DE

ß 223 DF

À 224 E0

á 225 E1

â 226 E2

ã 227 E3

ä 228 E4

Universitas Sumatera Utara

Page 21: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

ASCII Decimal Hexadecimal

Å 229 E5

Æ 230 E6

ç 231 E7

è 232 E8

é 233 E9

ê 234 EA

ë 235 EB

Ì 236 EC

Í 237 ED

î 238 EE

ï 239 EF

ð 240 F0

ñ 241 F1

ò 242 F2

ó 243 F3

ô 244 F4

õ 245 F5

ö 246 F6

÷ 247 F7

ø 248 F8

ù 249 F9

ú 250 FA

û 251 FB

ü 252 FC

ý 253 FD

þ 254 FE

ÿ 255 FF

Universitas Sumatera Utara

Page 22: LAMPIRAN A : LISTING PROGRAM PrimeGenerator.java

Universitas Sumatera Utara