3.3.2 Pseudocode dan Flowchart Primitive Roots
Primitive Roots Akar Primitif pada penelitian ini digunakan sebagai salah satu kunci
publik yang kemudian akan digunakan untuk mengenkripsi pesan. Akar primitif yang digunakan adalah akar primitif dari bilangan prima yang telah dibangkitkan di fungsi
Lehmann Primality Test . Berikut adalah pseudocode untuk mencari akar primitif :
1. function prime_factorsn:
2. i = 2
3. while i i = n:
4. if n mod i :
5. i += 1
6. else:
7. n = i
8. factors.appendi
9. print i
10. if n 1:
11. factors.appendn
12. 13.
function primitive_rootsrandom, p: 14.
for i in range0, lenfactors: 15.
a= rand_intp-1factors[i] mod p 16.
if a == 1: 17.
return fail 18.
return rand_int
Fungsi di atas terbagi atas dua bagian. Fungsi yang pertama bertujuan untuk mencari faktor prima dari p
– 1. Fungsi yang kedua adalah fungsi yang akan digunakan untuk memeriksa apakah sebuah bilangan acak merupakan akar primitif.
Hal yang pertama kali dilakukan adalah menjalankan fungsi
prime_factors
dengan menerima inputan berupa bilangan prima p. Bilangan prima tersebut akan dicari faktor primanya dari p
– 1. Setelah faktor prima didapat, akan dicek akar primitifnya dari bilangan acak yang dibangkitkan dengan menjalankan fungsi
primitive_roots.
Jika persamaan 15 terpenuhi, maka bilangan acak yang dibangkitkan merupakan akar primitif
Berikut flowchart algoritma pencarian akar primitif yang dapat ditunjukkan dari Gambar 3.8.
Universitas Sumatera Utara
Gambar 3.8 Flowchart Primitive Roots
3.3.3 Pseudocode dan Flowchart Enkripsi ElGamal
Pada tahap enkripsi, pesan asli diubah menjadi pesan rahasia menggunakan kunci publik yang telah dibangkitkan
.
Pesan asli akan diubah menjadi deretan kode ASCII sesuai dengan representasi numeriknya. Enkripsi dibagi atas dua bagian, yang pertama
adalah perhitungan
� mod �
dan yang kedua adalah perhitungan
�� mod � .
Pseudocode untuk enkripsi ElGamal adalah sebagai berikut :
1. function encryptMessage:
2. message = readfileinput
3. p = lehmannn
4. alpha = prime_rootsrand_int,p
Universitas Sumatera Utara
5. y = generate_key
6. 7.
converted_message = [] 8.
for i in message: 9.
converted_message.appendordi 10.
11. alpha_exp_b = []
12. malpha_exp_b = []
13. n = lenconverted_message
14. b = []
15. result = []
16. 17.
for i in range0,n: 18.
b.appendrandom_numberp 19.
20. for i in range0,n:
21. alpha_exp_b.appendalphab[i] mod p
22. 23.
for i in range0,n: 24.
malpha = yb[i] 25.
malpha = malpha converted_message[i]
26. malpha_exp_b.append
27. malpha mod p
28. 29.
for i in range0,n: 30.
result.appendalpha_exp_b[i] 31.
result.appendmalpha_exp_b[i]
Pada pseudocode baris 2 sampai 5, sistem menerima inputan berupa pesan asli dan kunci publik. Kemudian pada pseudocode baris 7 sampai 9, pesan dipindahkan
ke variabel
converted_message
dan diubah menjadi representasi numeriknya pada
tabel ASCII. Pada baris 16, dibangkitkan bilangan acak yang kemudian akan digunakan pada perhitungan di baris 18 sampai baris 24, dimana akan dihasilkan
dua variabel bersifat array yang menyimpan angka-angka hasil enkripsi dari pesan asli. Lalu variabel tersebut akan disatukan dan disimpan ke dalam variabel
result
Universitas Sumatera Utara
Berikut flowchart algoritma enkripsi ElGamal yang dapat ditunjukkan dari Gambar 3.9.
Universitas Sumatera Utara
Gambar 3.9 Flowchart Enkripsi ElGamal
Universitas Sumatera Utara
3.3.4 Pseudocode dan Flowchart Dekripsi ElGamal