Anda di halaman 1dari 23

Nama : T.M.

Farhan Al Rasyid
NIM : 1912000217
Kelas : IF B Pagi Semester VI
Mata Kuliah : Kriptografi
Dosen : M. Irfan Aldy Nasution, M.Kom

UJIAN TENGAH SEMESTER (UTS)


1. Apa yang dimaksud dengan Kriptografi?
Jawab :
Kriptografi berasal dari bahasa Yunani dengan memadukan dua kata, yaitu kryptos dan
graphein. Kryptos berarti tersembunyi atau rahasia, sedangkan graphein memiliki arti
menulis. Makna kriptografi secara harfiah ialah menulis secara tersembunyi untuk
menyampaikan pesan-pesan yang perlu dijaga kerahasiaannya. Kriptografi memiliki
pengertian lain, yakni suatu ilmu tentang teknik enkripsi naskah asli (plaintext) yang
diacak memanfaatkan sebuah kunci enkripsi sehingga naskah asli tersebut berubah
menjadi naskah yang sulit dibaca (chipertext) oleh pihak yang tidak memiliki kunci
dekripsi.
2. Buatlah Kriptografi Vigenere Cipher dan Beafort Cipher dari nama masing-masing,
ambil 2 nama dari depan dan tambah lagi dibelakang dengan kata “SECURE” lalu
kata kuncinya “AMAN”, buat enkripsi dan dekripsinya lengkap dengan langkah-
langkah pembuatannya! Jika nama hanya 1 kata maka tambah “SECURELOCK”.
Jawab :
 Vigenère Cipher
 Enkripsi :
Plaintext : FARHAN RASYID SECURE
Kunci : AMAN
Ciphertext : ?
Jawab :
P:FARHAN RASYID SECURE
K:AMANAMANAMANAMANAM

A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12

N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25
1. C(‘F’) = (F+A)mod 26
= (5+0)mod 26
= 5 mod 26 = 5 = F
2. C(‘A’) = (A+M)mod 26
= (0+12)mod 26
= 12 mod 26 = 12 = M
3. C(‘R’) = (R+A)mod 26
= (17+0)mod 26
= 17 mod 26 = 17 = R
4. C(‘H’) = (H+N)mod 26
= (7+13)mod 26
= 20 mod 26 = 20 = U
5. C(‘A’) = (A+A)mod 26
= (0+0)mod 26
= 0 mod 26 = 0 = A
6. C(‘N’) = (N+M)mod 26
= (13+12)mod 26
= 25 mod 26 = 25 = Z
7. C(‘R’) = (R+A)mod 26
= (17+0)mod 26
= 17 mod 26 = 17 = R
8. C(‘A’) = (A+N)mod 26
= (0+13)mod 26
= 13 mod 26 = 13 = N
9. C(‘S’) = (S+A)mod 26
= (18+0)mod 26
= 18 mod 26 = 18 = S
10. C(‘Y’) = (Y+M)mod 26
= (24+12)mod 26
= 36 mod 26 = 10 = K
11. C(‘I’) = (I+A)mod 26
= (8+0)mod 26
= 8 mod 26 = 8 = I
12. C(‘D’) = (D+N)mod 26
= (3+13)mod 26
= 16 mod 26 = 16 = Q
13. C(‘S’) = (S+A)mod 26
= (18+0)mod 26
= 18 mod 26 = 18 = S
14. C(‘E’) = (E+M)mod 26
= (4+12)mod 26
= 16 mod 26 = 16 = Q
15. C(‘C’) = (C+A)mod 26
= (2+0)mod 26
= 2 mod 26 = 2 = C
16. C(‘U’) = (U+N)mod 26
= (20+13)mod 26
= 33 mod 26 = 7 = H
17. C(‘R’) = (R+A)mod 26
= (17+0)mod 26
= 17 mod 26 = 17 = R
18. C(‘E’) = (E+M)mod 26
= (4+12)mod 26
= 16 mod 26 = 16 = Q

Ciphertext : FMRUAZ RNSKIQ SQCHRQ

 Dekripsi :
Chiphertext : FMRUAZ RNSKIQ SQCHRQ
Kunci : AMAN
Plaintext : ?
Jawab :
C:FMRUAZ RNSKIQ SQCHRQ
K:AMANAMANAMANAMANAM

A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12
N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25

1. P(‘F’) = (F-A)mod 26
= (5-0)mod 26
= 5 mod 26 = 5 = F
2. P(‘M’) = (M-M)mod 26
= (12-12)mod 26
= 0 mod 26 = 0 = A
3. P(‘R’) = (R-A)mod 26
= (17-0)mod 26
= 17 mod 26 = 17 = R
4. P(‘U’) = (U-N)mod 26
= (20-13)mod 26
= 7 mod 26 = 7 = H
5. P(‘A’) = (A-A)mod 26
= (0-0)mod 26
= 0 mod 26 = 0 = A
6. P(‘Z’) = (Z-M)mod 26
= (25-12)mod 26
= 13 mod 26 = 13 = N
7. P(‘R’) = (R-A)mod 26
= (17-0)mod 26
= 17 mod 26 = 17 = R
8. P(‘N’) = (N-N)mod 26
= (13-13)mod 26
= 0 mod 26 = 0 = A
9. P(‘S’) = (S-A)mod 26
= (18-0)mod 26
= 18 mod 26 = 18 = S
10. P(‘K’) = (K-M)mod 26
= (10-12)mod 26
= -2 mod 26 = 24 = Y
11. P(‘I’) = (I-A)mod 26
= (8-0)mod 26
= 8 mod 26 = 8 = I
12. P(‘Q’) = (Q-N)mod 26
= (16-13)mod 26
= 3 mod 26 = 3 = D
13. P(‘S’) = (S-A)mod 26
= (18-0)mod 26
= 18 mod 26 = 18 = S
14. P(‘Q’) = (Q-M)mod 26
= (16-12)mod 26
= 4 mod 26 = 4 = E
15. P(‘C’) = (C-A)mod 26
= (2-0)mod 26
= 2 mod 26 = 2 = C
16. P(‘H’) = (H-N)mod 26
= (7-13)mod 26
= - 6 mod 26 = 20 = U
17. P(‘R’) = (R-A)mod 26
= (17-0)mod 26
= 17 mod 26 = 17 = R
18. P(‘Q’) = (Q-M)mod 26
= (16-12)mod 26
= 4 mod 26 = 4 = E
Plaintext : FARHAN RASYID SECURE

 Beaufort Cipher
 Enkripsi :
Plaintext : FARHAN RASYID SECURE
Kunci : AMAN
Ciphertext : ?
Jawab :
P:FARHAN RASYID SECURE
K:AMANAMANAMANAMANAM
A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12

N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25

Cc = (k – Pc) mod 26

1. C(‘F’) = (A - F) mod 26
= (0 - 5) mod 26
= - 5 mod 26 = 21 = V
2. C(‘A’) = (M - A) mod 26
= (12 - 0) mod 26
= 12 mod 26 = 12 = M
3. C(‘R’) = (A - R) mod 26
= (0 - 17) mod 26
= - 17 mod 26 = 9 = J
4. C(‘H’) = (N - H) mod 26
= (13 - 7) mod 26
= 6 mod 26 = 6 = G
5. C(‘A’) = (A - A) mod 26
= (0 - 0) mod 26
= 0 mod 26 = 0 = A
6. C(‘N’) = (M - N) mod 26
= (12 - 13) mod 26
= - 1 mod 26 = 25 = Z
7. C(‘R’) = (A - R) mod 26
= (0 - 17) mod 26
= - 17 mod 26 = 9 = J
8. C(‘A’) = (N - A) mod 26
= (13 - 0) mod 26
= 13 mod 26 = 13 = N
9. C(‘S’) = (A - S) mod 26
= (0 - 18) mod 26
= - 18 mod 26 = 8 = I
10. C(‘Y’) = (M – Y )mod 26
= (12 - 24) mod 26
= 14 mod 26 = 14 = O
11. C(‘I’) = (A - I) mod 26
= (0 - 8) mod 26
= - 8 mod 26 = 18 = S
12. C(‘D’) = (N - D) mod 26
= (13 - 3) mod 26
= 10 mod 26 = 10 = K
13. C(‘S’) = (A - S) mod 26
= (0 - 18) mod 26
= - 18 mod 26 = 8 = I
14. C(‘E’) = (M - E) mod 26
= (12 - 4) mod 26
= 8 mod 26 = 8 = I
15. C(‘C’) = (A - C) mod 26
= (0 - 2) mod 26
= - 2 mod 26 = 24 = Y
16. C(‘U’) = (N - U) mod 26
= (13 - 20) mod 26
= - 7 mod 26 = 19 = T
17. C(‘R’) = (A - R) mod 26
= (0 - 17) mod 26
= - 17 mod 26 = 9 = J
18. C(‘E’) = (M - E) mod 26
= (12 - 4) mod 26
= 8 mod 26 = 8 = I
Ciphertext : VMJGAZ JNIOSK IIYTJI

 Dekripsi :
Chiphertext : VMJGAZ JNIOSK IIYTJI
Kunci : AMAN
Plaintext : ?
Jawab :
C:VMJGAZ JNIOSK IIYTJI
K:AMANAMANAMANAMANAM

A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12

N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25

Pc = (k – Cc) mod 26

1. P(‘V’) = (A - V) mod 26
= (0 - 21) mod 26
= - 21 mod 26 = 5 = F
2. P(‘M’) = (M - M) mod 26
= (0 - 0) mod 26
= 0 mod 26 = 0 = A
3. P(‘J’) = (A - J) mod 26
= (0 - 9) mod 26
= - 9 mod 26 = 17 = R
4. P(‘G’) = (N - G) mod 26
= (13 - 6) mod 26
= 7 mod 26 = 7 = H
5. P(‘A’) = (A - A) mod 26
= (0 - 0) mod 26
= 0 mod 26 = 0 = A
6. P(‘Z’) = (M - Z) mod 26
= (12 - 25) mod 26
= - 13 mod 26 = 13 = N
7. P(‘J’) = (A - J) mod 26
= (0 - 9) mod 26
= - 9 mod 26 = 17 = R
8. P(‘N’) = (N - N) mod 26
= (13 - 13) mod 26
= 0 mod 26 = 0 = A
9. P(‘I’) = (A - I) mod 26
= (0 - 8) mod 26
= - 8 mod 26 = 18 = S
10. P(‘O’) = (M – O)mod 26
= (12 - 14) mod 26
= - 2 mod 26 = 24 = Y
11. P(‘S’) = (A - S) mod 26
= (0 - 18) mod 26
= - 18 mod 26 = 8 = I
12. P(‘K’) = (N - K) mod 26
= (13 - 10) mod 26
= 3 mod 26 = 3 = D
13. P(‘I’) = (A - I) mod 26
= (0 - 8) mod 26
= - 8 mod 26 = 18 = S
14. P(‘I’) = (M - I) mod 26
= (12 - 8) mod 26
= 4 mod 26 = 4 = E
15. P(‘Y’) = (A - Y) mod 26
= (0 - 24) mod 26
= - 24 mod 26 = 2 = C
16. P(‘T’) = (N - T) mod 26
= (13 - 19) mod 26
= - 6 mod 26 = 20 = U
17. P(‘J’) = (A - J) mod 26
= (0 - 9) mod 26
= - 9 mod 26 = 17 = R
18. P(‘I’) = (M - I) mod 26
= (12 - 8) mod 26
= 4 mod 26 = 4 = E
Plaintext : FARHAN RASYID SECURE

3. Buatlah Kriptografi RSA dari nama masing-masing, ambil 2 nama dari depan dan
tambah lagi dibelakang dengan kata “SECURE”, lalu untuk Public Key dan Private
Key gunakan bilangan prima! Buat enkripsi dan dekripsinya lengkap dengan
langkah-langkah pembuatannya! Jika nama hanya 1 kata maka tambah
“SECURELOCK”.
Jawab :
Sebelumnya harus ditentukan dulu Public Key Dan Private Key-nya, berikut langkah-
langkah untuk mendapatkan Public Key dan Private Key :

• Pertama, menentukan 2 buah bilangan prima untuk p dan q :

p = 11

q = 13

• Selanjutnya mendapatkan nilai n dimana rumusnya n = p * q dan akan menjadi seperti


ini :

n = 11 * 13

n = 143

• Mendapatkan nilai m dimana rumusnya m = (p - 1) * (q - 1) dan akan menjadi seperti


ini :

m = (11 - 1) * (13 - 1)

m = (10) * (12)

m = 120

• Menentukan nilai e dengan syarat e = e > 1 and GCD(m,e) = 1 Dimana"17" adalah nilai
yang memenuhi syarat untuk nilai e adalah e = GCD(120,17) = 1

• Menentukan nilai d dengan syarat d = (d * e) mod m = 1 Dimana "473" adalah nilai


yang memenuhi syarat untuk nilai d adalah d = (473 * 17) mod 120 = 1

• Dari proses diatas, maka akan mendapatkan kunci public dan kunci privat dimana :

public key = (e,n)


private key = (d,n)

Dan kunci akan menjadi seperti ini :

public key = (17,143)

private key = (473,143)

Setelah mendapatkan public key dan private key, proses selanjutnya melakukan Enkripsi
dan Dekripsi, yaitu kata “FARHAN RASYID SECURE". Berikut prosesnya :

Masukkan tabel ASCII untuk melihat Decimal-nya:

Enkripsi “FARHAN RASYID SECURE”


Text ASCII Proses Enkripsi

F 70 = 717 mod 143 = 232630513987207 mod 143 = 50


= 017mod 143 = 0 mod 143 = 0
= 50.0
A 65 = 617 mod 143 = 16926659444736 mod 143 = 41
= 517 mod 143 = 762939453125 mod 143 = 135
= 41.135
R 82 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 217 mod 143 = 131072 mod 143 = 84
= 112.84

H 72 = 717 mod 143 = 232630513987207 mod 143 = 50


= 217 mod 143 = 131072 mod 143 = 84
= 50.84
A 65 = 617 mod 143 = 16926659444736 mod 143 = 41
= 517 mod 143 = 762939453125 mod 143 = 135
= 41.135
N 78 = 717 mod 143 = 232630513987207 mod 143 = 50
= 817 mod 143 = 2251799813685248 mod 143 = 112
= 50.112
R 82 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 217 mod 143 = 131072 mod 143 = 84
= 112.84
A 65 = 617 mod 143 = 16926659444736 mod 143 = 41
= 517 mod 143 = 762939453125 mod 143 = 135
= 41.135
S 83 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 317 mod 143 = 129140163 mod 143 = 9
= 112.9
Y 89 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 917 mod 143 = 16677181699666569 mod 143 = 81
= 112.81
I 73 = 717 mod 143 = 232630513987207 mod 143 = 50
= 317 mod 143 = 129140163 mod 143 = 9
= 50.9
D 68 = 617 mod 143 = 16926659444736 mod 143 = 41
= 817 mod 143 = 2251799813685248 mod 143 = 112
= 41.112
S 83 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 317 mod 143 = 129140163 mod 143 = 9
= 112.9
E 69 = 617 mod 143 = 16926659444736 mod 143 = 41
= 917 mod 143 = 16677181699666569 mod 143 = 81
= 41.81
C 67 = 617 mod 143 = 16926659444736 mod 143 = 41
= 717 mod 143 = 232630513987207 mod 143 = 50
= 41.50
U 85 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 517 mod 143 = 762939453125 mod 143 = 135
= 112.135
R 82 = 817 mod 143 = 2251799813685248 mod 143 = 112
= 217 mod 143 = 131072 mod 143 = 84
= 112.84
E 69 = 617 mod 143 = 16926659444736 mod 143 = 41
= 917 mod 143 = 16677181699666569 mod 143 = 81
= 41.81
Enkripsi :
50.041.135112.8450.8441.13550.112112.8441.135112.9112.8150.941.112112.941.8141.50
112.135112.8441.81

Dekripsi
“50.041.135112.8450.8441.13550.112112.8441.135112.9112.8150.941.
112112.941.8141.50112.135112.8441.81”

Proses Dekripsi Text ASCII


= 50473 mod 143 = 4,1002661789349906932317905205995e+803 mod F 70
143 = 7
= 0473 mod 143 = 0 mod 143 = 0
= 70
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod A 65
143 = 6
= 135473 mod 143 = 4,4450075005315881190115797070841e+1007
mod 143 = 5
= 65
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod R 82
143 = 8
= 84473 mod 143 = 1,5279259511881860490082452270804e+910 mod
143 = 2
= 82
= 50473 mod 143 = 4,1002661789349906932317905205995e+803 mod H 72
143 = 7
= 84473 mod 143 = 1,5279259511881860490082452270804e+910 mod
143 = 2
= 72
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod A 65
143 = 6
= 135473 mod 143 = 4,4450075005315881190115797070841e+1007
mod 143 = 5
= 65
= 50473 mod 143 = 4,1002661789349906932317905205995e+803 mod N 78
143 = 7
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod
143 = 8
= 78
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod R 82
143 = 8
= 84473 mod 143 = 1,5279259511881860490082452270804e+910 mod
143 = 2
= 82
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod A 65
143 = 6
= 135473 mod 143 = 4,4450075005315881190115797070841e+1007
mod 143 = 5
= 65
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod S 83
143 = 8
= 9473 mod 143 = 2,2735628527635283527901535407293e+451 mod
143 = 3
= 83
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod Y 89
143 = 8
= 81473 mod 143 = 5,1690880454662333032878628286711e+902 mod
143 = 9
= 89
= 50473 mod 143 = 4,1002661789349906932317905205995e+803 mod I 73
143 = 7
= 9473 mod 143 = 2,2735628527635283527901535407293e+451 mod
143 = 3
= 73
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod D 68
143 = 6
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod
143 = 8
= 68
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod S 83
143 = 8
= 9473 mod 143 = 2,2735628527635283527901535407293e+451 mod
143 = 3
= 83
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod E 69
143 = 6
= 81473 mod 143 = 5,1690880454662333032878628286711e+902 mod
143 = 9
= 69
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod C 67
143 = 6
= 50473 mod 143 = 4,1002661789349906932317905205995e+803 mod
143 = 7
= 67
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod U 85
143 = 8
= 135473 mod 143 = 4,4450075005315881190115797070841e+1007
mod 143 = 5
= 85
= 112473 mod 143 = 1,9060080168767016373213457279985e+969 mod R 82
143 = 8
= 84473 mod 143 = 1,5279259511881860490082452270804e+910 mod
143 = 2
= 82
= 41473 mod 143 = 7,0269073669351534991803768831818e+762 mod E 69
143 = 6
= 81473 mod 143 = 5,1690880454662333032878628286711e+902 mod
143 = 9
= 69
Dekripsi : FARHAN RASYID SECURE

4. Buatlah program Kriptografi Klasik bebas menggunakan algoritma apa saja dan
juga bebas menggunakan bahasa pemogramannya, copy paste coding program ke
lembar jawaban! *Catatan: jika sudah dikerjakan program Kriptografi Klasik dan
mau menambah membuat program Kriptografi Simetris atau Kriptografi Asimetris,
maka ada nilai tambahan yang tinggi.
Jawab :
 Program Vigenere Cipher Menggunakan Bahasa Pemrograman Java :

package vigenerecipher;

import java.util.Scanner;

public class VigenereCipher {

private static Scanner in;


private static String message;
private static String mappedKey;

public static void main(String[] args){


in = new Scanner(System.in);
System.out.println("***Program Enkripsi dan Dekripsi Vigenere Cipher***");
System.out.print("1. Enkripsi\n2. Dekripsi\nPilih(1,2): ");
int choice = in.nextInt();
in.nextLine();

if(choice == 1){
System.out.println("---Enkripsi---");
msgAndKey();
cipherEncryption(message, mappedKey);
} else if(choice == 2){
System.out.println("---Dekripsi---");
msgAndKey();
cipherDecryption(message, mappedKey);

} else {
System.out.println("Pilihan Salah");
}
}

private static void cipherDecryption(String message, String mappedKey) {


int[ ][ ] table = createVigenereTable();
String decryptedText = "";

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


if(message.charAt(i) == (char)32 && mappedKey.charAt(i) == (char)32){
decryptedText += " ";
} else {
decryptedText += (char)(65 + itrCount((int)mappedKey.charAt(i),
(int)message.charAt(i)));
}
}

System.out.println("Plaintext: " + decryptedText);


}

private static int itrCount(int key, int msg) {


// this function will return the count which it takes from key's letter to reach cipher
letter
// and then this count will be used to calculate decryption of encrypted letter in
message.
int counter = 0;
String result = "";
for (int i = 0; i < 26; i++) {
if(key+i > 90){
//90 being ASCII of Z
result += (char)(key+(i-26));

} else {
result += (char)(key+i);
}
}

//counting from key's letter to cipher letter in vigenere table


for (int i = 0; i < result.length(); i++) {
if(result.charAt(i) == msg){
break; // letter found
} else {
counter++;
}
}
return counter;
}

private static void cipherEncryption(String message, String mappedKey) {


int[ ][ ] table = createVigenereTable();
String encryptedText = "";
for (int i = 0; i < message.length(); i++) {
if(message.charAt(i) == (char)32 && mappedKey.charAt(i) == (char)32){
encryptedText += " ";
} else {
//accessing element at table[i][j] position to replace it with letter in message
encryptedText+= (char)table[(int)message.charAt(i)-65]
[(int)mappedKey.charAt(i)-65];
}
}

System.out.println("Ciphertext: " + encryptedText);


}

private static int[ ] [ ] createVigenereTable() {


// creating 26x26 table containing alphabets
int[ ][ ] tableArr = new int[26][26];
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 26; j++) {
int temp;
if((i+65)+j > 90){
temp = ((i+65)+j) -26;
tableArr[i][j] = temp;
} else {
temp = (i+65)+j;
tableArr[i][j] = temp;
}
}
}

//printing table to check if its correct


// for (int i = 0; i < 26; i++) {
// for (int j = 0; j < 26; j++) {
// System.out.print((char)tableArr[i][j] + " ");
// }
// System.out.println();
// }

return tableArr;
}

private static void msgAndKey() {


System.out.println("***Pesan dan kunci harus huruf***");

//message input
System.out.print("Masukkan Pesan (Plaintext/Ciphertext) : ");
String msg = in.nextLine();
msg = msg.toUpperCase();

//key input
System.out.print("Masukkan Kunci: ");
String key = in.next();
in.nextLine();
key = key.toUpperCase();

//mapping key to message


String keyMap = "";
for (int i = 0, j = 0; i < msg.length(); i++) {
if(msg.charAt(i) == (char)32){
//ignoring space
keyMap += (char)32;

} else {
//mapping letters of key with message
if(j < key.length()){
keyMap += key.charAt(j);
j++;
} else {
//restarting the key from beginning once its length is complete
// and its still not mapped to message
j = 0;
keyMap += key.charAt(j);
j++; //without incrementing here, key's first letter will be mapped twice

}
} //if-else

} //for
message = msg;
mappedKey = keyMap;

// System.out.println("Message: " + message);


// System.out.println("key: " + mappedKey);
}

 Program Kriptografi Asimetris RSA Menggunakan Bahasa Pemrograman C++ :

#include<iostream>
#include<math.h>
#include<string.h>
#include<stdlib.h>

using namespace std;

long int p, q, n, t, flag, e[100], d[100], temp[100], j, m[100], en[100], i;


char msg[100];
int prime(long int);
void ce();
long int cd(long int);
void encrypt();
void decrypt();
int prime(long int pr)
{
int i;
j = sqrt(pr);
for (i = 2; i <= j; i++)
{
if (pr % i == 0)
return 0;
}
return 1;
}
int main()
{
cout << "\n------Program Kriptografi RSA------\n";
cout << "\nMasukkan Bilangan Prima Pertama : ";
cin >> p;
flag = prime(p);
if (flag == 0)
{
cout << "\nINPUT SALAH\n";
exit(1);
}
cout << "\nMasukkan Bilangan Prima Kedua : ";
cin >> q;
flag = prime(q);
if (flag == 0 || p == q)
{
cout << "\nINPUT SALAH\n";
exit(1);
}
cout << "\nMasukkan Pesan : ";
fflush(stdin);
cin >> msg;
for (i = 0; msg[i] != '\0'; i++)
m[i] = msg[i];
n = p * q;
t = (p - 1) * (q - 1);
ce();
cout << "\nNILAI e DAN d YANG MUNGKIN\n";
for (i = 0; i < j - 1; i++)
cout << e[i] << "\t" << d[i] << "\n";
encrypt();
decrypt();
return 0;
}
void ce()
{
int k;
k = 0;
for (i = 2; i < t; i++)
{
if (t % i == 0)
continue;
flag = prime(i);
if (flag == 1 && i != p && i != q)
{
e[k] = i;
flag = cd(e[k]);
if (flag > 0)
{
d[k] = flag;
k++;
}
if (k == 99)
break;
}
}
}
long int cd(long int x)
{
long int k = 1;
while (1)
{
k = k + t;
if (k % x == 0)
return (k / x);
}
}
void encrypt()
{
long int pt, ct, key = e[0], k, len;
i = 0;
len = strlen(msg);
while (i != len)
{
pt = m[i];
pt = pt - 96;
k = 1;
for (j = 0; j < key; j++)
{
k = k * pt;
k = k % n;
}
temp[i] = k;
ct = k + 96;
en[i] = ct;
i++;
}
en[i] = -1;
cout << "\nPESAN ENKRIPSI-NYA ADALAH :\n";
for (i = 0; en[i] != -1; i++)
printf("%c", en[i]);
}
void decrypt()
{
long int pt, ct, key = d[0], k;
i = 0;
while (en[i] != -1)
{
ct = temp[i];
k = 1;
for (j = 0; j < key; j++)
{
k = k * ct;
k = k % n;
}
pt = k + 96;
m[i] = pt;
i++;
}
m[i] = -1;
cout << "\nPESAN DEKRIPSI-NYA ADALAH :\n";
for (i = 0; m[i] != -1; i++)
printf("%c", m[i]);
}

Anda mungkin juga menyukai