• Tidak ada hasil yang ditemukan

2. Primitive Root (prim_root.py) - Teknik Pemecahan Kunci Privat Elgamal dengan Algoritma Baby Step Giant Step

N/A
N/A
Protected

Academic year: 2019

Membagikan "2. Primitive Root (prim_root.py) - Teknik Pemecahan Kunci Privat Elgamal dengan Algoritma Baby Step Giant Step"

Copied!
19
0
0

Teks penuh

(1)

LISTING PROGRAM

1.

Lehmann Primality Test (lehmann.py)

from random import randint import timeit

f = file("digit.txt",'r') data = f.read()

n = int(data)

#generate random integer and checking even integer def random_with_N_digits(n):

range_start = 10**(n-1) range_end = (10**n)-1

l = randint(range_start, range_end) if l % 2 == 0 or l % 3 == 0:

return random_with_N_digits(n) return l

#prime check def lehman(l): persen = 50

#jalankan fungsi def begin():

2.

Primitive Root (prim_root.py)

from random import randint

import lehmann

import sys

(2)

#import prime number dari file lehmann.py

prime = lehmann.begin()

#generate random prime_roots

def random_prime_roots(prime):

l = randint(2, prime-1)

print l

return l

#find distinct primes

def prime_factors(n):

i = 2

while i * i <= n:

if pow(n,1,i) :

i += 1

else:

n //= i

factors.append(i)

print i

if n > 1:

factors.append(n)

print n

def prime_roots2(rand_int, p):

for i in range(0, len(fixFactors)):

a = pow(rand_int,(p-1)/fixFactors[i],p)

if a == 1:

print "failed"

return "fail"

return rand_int

prime_factors(prime-1)

[fixFactors.append(item) for item in factors if item not in

fixFactors]

#find prime root

def begin_prime_root():

(3)

x = prime_roots2(rand_int,prime)

if x == "fail":

return begin_prime_root()

return rand_int

del sys.modules["lehmann"]

del lehmann

3.

Bangkit Kunci (generate_key.py)

import timeit

start = timeit.default_timer()

import prim_root

from random import randint

import sys

def random_secret_key():

l = randint(1, p-2)

return l

p = prim_root.prime

alpha = prim_root.primitive_root

a = random_secret_key()

#bangkitkan kunci

y = pow(alpha,a,p)

end = timeit.default_timer()

4.

Main Form (MainForm.py)

from javax.swing import *

from java.awt import *

from EncryptionForm import frameEn

from DecryptionForm import frameDe

from BSGS import frameBSGS

from About import frameAb

from Help import frameHe

def openEnForm(event):

(4)

def openDeForm(event):

frameDe.visible = True

def openBSGSForm(event):

frameBSGS.visible = True

def openAb(event):

frameAb.visible = True

def openHe(event):

frameHe.visible = True

def generateKey():

start = timeit.default_timer()

import generate_key

textAlpha.text = str(generate_key.alpha)

textPrime.text = str(generate_key.p)

textY.text = str(generate_key.y)

end = timeit.default_timer()

textTime.text = str((end - start) * 1000)

textA.text = str(generate_key.a)

del sys.modules["generate_key"]

del generate_key

def generateKeyAndDigit(event):

variable = str(textDigit.text)

f = file("digit.txt",'w')

f.write(variable)

f.close()

generateKey()

#create frame

frame = JFrame("Main Form", size=(400,325))

#create menu

menubar = JMenuBar()

fileMenu = JMenu("File")

(5)

fileExit = JMenuItem("About", actionPerformed = openAb)

fileExit.setMnemonic(KeyEvent.VK_A)

fileExit.setToolTipText("About Program")

fileMenu.add(fileExit)

fileHelp = JMenuItem("Help", actionPerformed = openHe)

fileHelp.setMnemonic(KeyEvent.VK_H)

fileHelp.setToolTipText("User Help")

fileMenu.add(fileHelp)

menubar.add(fileMenu)

frame.setJMenuBar(menubar)

#generate key

panel = JPanel()

panel.setLayout(None)

frame.getContentPane().add(panel)

gKey = JLabel("Public Key")

gKey.setBounds(35,0,100,100)

gKey.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(gKey)

inputDigit = JLabel("Prime Digits")

inputDigit.setBounds(5,25,100,100)

inputDigit.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(inputDigit)

textDigit = JTextField()

textDigit.setBounds(85,65,50,20)

panel.add(textDigit)

buttonDigit = JButton("Enter", actionPerformed =

generateKeyAndDigit)

buttonDigit.setBounds(150,65,70,20)

panel.add(buttonDigit)

(6)

labelAlpha.setBounds(5,50,100,100)

labelAlpha.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelAlpha)

textAlpha = JTextField()

textAlpha.editable = False

textAlpha.setBounds(85,90,140,20)

panel.add(textAlpha)

labelPrime = JLabel("P")

labelPrime.setBounds(5,75,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelPrime)

textPrime = JTextField()

textPrime.editable = False

textPrime.setBounds(85,115,140,20)

panel.add(textPrime)

labelY = JLabel("Alpha^A")

labelY.setBounds(5,100,100,100)

labelY.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelY)

textY = JTextField()

textY.editable = False

textY.setBounds(85,140,140,20)

panel.add(textY)

labelTime = JLabel("Time")

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20)

textTime.editable = False

(7)

gKey2 = JLabel("Private Key")

gKey2.setBounds(35,130,100,100)

gKey2.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(gKey2)

labelA = JLabel("A")

labelA.setBounds(5,155,100,100)

labelA.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelA)

textA = JTextField()

textA.editable = False

textA.setBounds(85,195,140,20)

panel.add(textA)

buttonEncrypt = JButton("Encryption", actionPerformed =

openEnForm)

buttonEncrypt.setBounds(250,55,100,30)

panel.add(buttonEncrypt)

buttonDecrypt = JButton("BSGS", actionPerformed = openBSGSForm)

buttonDecrypt.setBounds(250,105,100,30)

panel.add(buttonDecrypt)

buttonBSGS = JButton("Decryption", actionPerformed =

openDeForm)

buttonBSGS.setBounds(250,155,100,30)

panel.add(buttonBSGS)

rot = ImageIcon("one_piece_anime_key_art.jpg")

rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(),

rot.getIconHeight())

panel.add(rotLabel)

(8)

if __name__ == "__main__":

frame.setLocationRelativeTo(None)

frame.visible = True

frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE)

5.

Encryption Form (EncryptionForm.py)

from javax.swing import *

from java.awt.event import *

from java.lang import *

from java.awt import *

from random import randint

import sys

import zipfile

import re

import timeit

import math

#create frame

frameEn = JFrame("Encryption Form", size=(350,300))

#random number b generator

def random_number(prime):

N = math.ceil(math.sqrt(prime))

l = randint(0, N)

#print l

return l

#browse file function

def browseFile(event):

chooseFile = JFileChooser()

#filter = FileNameExtensionFilter("c files", ["c"])

#chooseFile.addChoosableFileFilter(filter)

ret = chooseFile.showDialog(frameEn, "Choose File")

if ret == JFileChooser.APPROVE_OPTION:

fileC = chooseFile.getSelectedFile()

textFL.text = fileC.getCanonicalPath()

(9)

def saveFile():

saveFile = JFileChooser()

saveFile.showDialog(frameEn, "Save To")

def readFile(file):

if file[-4:] == ".txt":

#filename = file.getCanonicalPath()

f = open(file, "r")

text = f.read()

f.close()

return text

else:

docx = zipfile.ZipFile(file)

content = docx.read('word/document.xml')

cleaned = re.sub('<(.|\n)*?>','',content)

pesan =[]

pesan = list(cleaned)

pesan = pesan[2::]

return pesan

def encryptMessage(event):

start = timeit.default_timer()

message = list(readFile(textFL.text))

p = int(textPrime.text)

alpha = int(textAlpha.text)

y = int(textY.text)

#conveting characters to ASCII

converted_message = []

for i in message:

converted_message.append(ord(i))

#encrypting converted message

alpha_exp_b = []

malpha_exp_b = []

n = len(converted_message)

(10)

#bilangan acak b

for i in range(0,n):

b.append(random_number(p))

#list for alpha_exp_b

for i in range(0,n):

alpha_exp_b.append(pow(alpha,b[i],p))

print pow(alpha,b[i],p),"alphaB"

#list for malpha_exp_b

for i in range(0,n):

malpha = pow(y,b[i])

malpha = malpha * converted_message[i]

malpha_exp_b.append(pow(malpha,1,p))

print pow(malpha,1,p), "malphaB"

#put file to encrypted.txt

variable1 = alpha_exp_b

variable2 = malpha_exp_b

f = file("encrypted.txt",'w')

for i in range(0, len(variable1)):

f.write(str(variable1[i]) + " ")

f.write(str(variable2[i]) + " ")

f.close()

end = timeit.default_timer()

textTime.text = str((end - start) * 1000)

JOptionPane.showMessageDialog(frameEn, "Enkripsi

Berhasil!",

"Info", JOptionPane.INFORMATION_MESSAGE)

print alpha_exp_b

print malpha_exp_b

#Encryption Form

panel = JPanel()

panel.setLayout(None)

#panel.setBackground(Color(66,66,66))

(11)

enc = JLabel("Encryption")

enc.setBounds(35,0,100,100)

enc.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(enc)

inputPT = JLabel("Plaintext")

inputPT.setBounds(5,25,100,100)

inputPT.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(inputPT)

textFL = JTextField()

textFL.setBounds(85,65,140,20)

panel.add(textFL)

buttonBrowse = JButton("Browse", actionPerformed = browseFile )

buttonBrowse.setBounds(230,65,100,20)

panel.add(buttonBrowse)

labelPK = JLabel("Input Your Public Key")

labelPK.setBounds(35,50,150,100)

labelPK.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(labelPK)

labelAlpha = JLabel("Alpha")

labelAlpha.setBounds(5,75,100,100)

labelAlpha.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelAlpha)

textAlpha = JTextField()

textAlpha.setBounds(85,115,140,20)

panel.add(textAlpha)

labelPrime = JLabel("P")

labelPrime.setBounds(5,100,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelPrime)

textPrime = JTextField()

(12)

panel.add(textPrime)

labelY = JLabel("Alpha^A")

labelY.setBounds(5,125,100,100)

labelY.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelY)

textY = JTextField()

textY.setBounds(85,165,140,20)

panel.add(textY)

buttonEncrypt = JButton("Encrypt", actionPerformed =

encryptMessage)

buttonEncrypt.setBounds(230,200,100,20)

panel.add(buttonEncrypt)

labelTime = JLabel("Time")

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20)

textTime.editable = False

panel.add(textTime)

rot = ImageIcon("one_piece_anime_key_art.jpg")

rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(),

rot.getIconHeight())

panel.add(rotLabel)

6.

Decryption Form (DecryptionForm.py)

from javax.swing import *

from java.awt.event import *

from java.lang import *

from java.awt import *

import timeit

(13)

#create frame

frameDe = JFrame("Decryption Form", size=(350,300))

#browse file location

def browseFile(event):

chooseFile = JFileChooser()

ret = chooseFile.showDialog(frameDe, "Choose File")

if ret == JFileChooser.APPROVE_OPTION:

fileC = chooseFile.getSelectedFile()

#text = readFile(fileC)

textFL.text = fileC.getCanonicalPath()

def readFile(file):

#filename = file.getCanonicalPath()

f = open(file, "r")

text = f.read()

f.close()

return text

def decryptMessage(event):

start = timeit.default_timer()

message = readFile(textFL.text)

message = message.split(' ')

message.pop()

messageInt = []

for item in message:

messageInt.append(int(item))

alpha_exp_b = []

malpha_exp_b = []

alpha_exp_b = messageInt[::2]

malpha_exp_b = messageInt[1::2]

print alpha_exp_b

print malpha_exp_b

p = int(textPrime.text)

(14)

#hitung p-1-a

p_min_a = p - 1 - a

n = len(alpha_exp_b)

decrypt = []

decrypt_result = []

#find alpha exp b exp p min a

for i in range(0,n):

decrypt.append(pow(alpha_exp_b[i],p_min_a,p))

#find malpha exp b * decrypt mod p

for i in range(0,n):

times = malpha_exp_b[i] * decrypt[i]

decrypt_result.append(pow(times,1,p))

print decrypt_result

pesan = ''.join(chr(i) for i in decrypt_result)

end = timeit.default_timer()

textTime.text = str((end - start) * 1000)

#print pesan

frameDR.visible = True

textArea.text = pesan

#Decryption form

panel = JPanel()

panel.setLayout(None)

#panel.setBackground(Color(66,66,66))

frameDe.getContentPane().add(panel)

dec = JLabel("Decryption")

dec.setBounds(35,0,100,100)

dec.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(dec)

inputCT = JLabel("Ciphertext")

inputCT.setBounds(5,25,100,100)

(15)

panel.add(inputCT)

textFL = JTextField()

textFL.setBounds(85,65,140,20)

panel.add(textFL)

buttonBrowse = JButton("Browse", actionPerformed = browseFile)

buttonBrowse.setBounds(230,65,100,20)

panel.add(buttonBrowse)

labelPK = JLabel("Input Your Key")

labelPK.setBounds(35,75,150,100)

labelPK.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(labelPK)

labelPrime = JLabel("P")

labelPrime.setBounds(5,100,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelPrime)

textPrime = JTextField()

textPrime.setBounds(85,140,140,20)

panel.add(textPrime)

buttonDecrypt = JButton("Decrypt", actionPerformed =

decryptMessage)

buttonDecrypt.setBounds(230,150,100,20)

panel.add(buttonDecrypt)

labelA = JLabel("A")

labelA.setBounds(5,125,100,100)

labelA.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelA)

textA = JTextField()

textA.setBounds(85,165,140,20)

panel.add(textA)

(16)

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20)

textTime.editable = False

panel.add(textTime)

rot = ImageIcon("one_piece_anime_key_art.jpg")

rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(),

rot.getIconHeight())

panel.add(rotLabel)

7.

Baby-step Giant-step (BSGS.py)

from javax.swing import *

from java.awt.event import *

from java.lang import *

from java.awt import *

import timeit

import math

#create frame

frameBSGS = JFrame("Baby-step Giant-step Form", size=(350,300))

#baby step giant step algorithm

def hack(event):

start = timeit.default_timer()

p = int(textPrime.text)

alpha = int(textAlpha.text)

y = int(textY.text)

x = 0

(17)

def inverse_modulo():

n = 1

while x == 0:

if (n * alpha) % p == 1:

break

else:

n += 1

return n

N = int(math.ceil(math.sqrt(p-1)))

N = N + 1

#print N

A = []

B = []

for j in range(0,N+1):

value = pow(alpha,j,p)

A.append(value)

inv = inverse_modulo()

for k in range(0,N+1):

power1 = pow(inv,N*k,p)

value = pow(y*power1,1,p)

B.append(value)

x1,x2 =0,0

for r in A:

if r == value:

x1 = A.index(r)

x2 = N*k

print x1,x2

break

if x1 + x2 != 0:

break

end = timeit.default_timer()

textTime.text = str((end - start) * 1000)

(18)

textA.text = str(A)

print end - start

JOptionPane.showMessageDialog(frameBSGS, "Hack Done!",

"Info", JOptionPane.INFORMATION_MESSAGE)

#Decryption

panel = JPanel()

panel.setLayout(None)

frameBSGS.getContentPane().add(panel)

labelPK = JLabel("Input Your Public Key")

labelPK.setBounds(35,0,150,100)

labelPK.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(labelPK)

labelAlpha = JLabel("Alpha")

labelAlpha.setBounds(5,25,100,100)

labelAlpha.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelAlpha)

textAlpha = JTextField()

textAlpha.setBounds(85,65,140,20)

panel.add(textAlpha)

labelPrime = JLabel("P")

labelPrime.setBounds(5,50,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelPrime)

textPrime = JTextField()

textPrime.setBounds(85,90,140,20)

panel.add(textPrime)

labelY = JLabel("Alpha^A")

labelY.setBounds(5,75,100,100)

labelY.setFont(Font("Times New Roman",Font.BOLD,12))

(19)

textY = JTextField()

textY.setBounds(85,115,140,20)

panel.add(textY)

buttonDecrypt = JButton("Find", actionPerformed = hack)

buttonDecrypt.setBounds(230,200,100,20)

panel.add(buttonDecrypt)

labelSK = JLabel("Private Key")

labelSK.setBounds(35,100,150,100)

labelSK.setFont(Font("Times New Roman",Font.BOLD,14))

panel.add(labelSK)

labelA = JLabel("A")

labelA.setBounds(5,125,100,100)

labelA.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelA)

textA = JTextField()

textA.editable = False

textA.setBounds(85,165,140,20)

panel.add(textA)

labelTime = JLabel("Time")

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12))

panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20)

textTime.editable = False

panel.add(textTime)

rot = ImageIcon("one_piece_anime_key_art.jpg")

rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(),

rot.getIconHeight())

Referensi

Dokumen terkait

Sebagai contoh, seorang manajer dapat mengarahkan seorang bawahan untuk melaksanakan suatu tugas tertentu, tetapi dia dapat juga mempengaruhi bawahan dalam menentukan

Pada hari ini Selasa tanggal tujuh belas Maret pukul empat belas lima menit Waktu Indonesia Barat, diangkat berdasarkan Surat Perintah Kepala Unit Layanan

• Melalui kuesioner, peneliti telah terlebih dahulu mendefinisikan pertanyaan serta jawaban, karena itu umumnya kuesioner telah menyediakan jawaban yang hendak dipilih

Apakah ada hubungan antara penilaian risiko karies (CAT) secara umum dengan kejadian SECC, ECC (non-SECC), dan bebas karies pada anak usia dibawah 2 tahun di Kecamatan

Usaha Mikro Rp. Usaha kecil adalah usaha ekonomi produktif yang berdiri sendiri, dilakukan orang perorangan atau badan usaha yang bukan merupakan anak perusahaan

Berdasarkan studi pendahuluan yang dilakukan oleh peneliti pada tanggal 30 November-13 Desember 2015, diketahui di desa Dameka, kecamatan Katikutana Selatan,

Segala puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa, karena atas segala rahmat dan pertolongan-Nya sehingga penelitian dapat selesai dilakukan

Tabel 4.7 Distribusi PHBS Tatanan Rumah Tangga Responden Warga Dusun Deres yang Bekerja yang Bekerja Sebagai Pemulung di TPA Blondo