Pseudocode dan Flowchart Primitive Roots Pseudocode dan Flowchart Enkripsi ElGamal

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