Lampiran Listing Program
1.
ElGamal.py
from random import randint
import akarPrimitifGauss as primitiveRoot
from java.math import BigInteger as nonExshaustingPrimeGenerator import pengujianMillerSelfridgeRabin as primality
def keyGenerating(primeBit, A): myPK = [0,0,0]
batasBawah = pow(2, (primeBit-1)) up = primeBit
batasAtas = (pow(2, up)) batasAtas = batasAtas-1
prime = randint(batasBawah, batasAtas)
prime = nonExshaustingPrimeGenerator.valueOf(prime) while(primality.pengujianMSR(prime)==False):
prime =
nonExshaustingPrimeGenerator.nextProbablePrime(prime) prime = int(prime)
alpha = primitiveRoot.GaussForPrimitiveRoot(prime) alpha_a = pow(alpha, A)
alpha_a = alpha_a%prime myPK[0] = alpha
myPK[1] = alpha_a myPK[2] = prime return myPK
def Enkripsi(publicKey, M): print M
C = [[0 for j in range(2)] for i in range(len(M))] a = publicKey[0]
aA = publicKey[1] p = publicKey[2]
for i in range(0, len(M)): k = randint(2,p-2) C[i][0] = (pow(a,k))%p
C[i][1] = (((pow(aA,k))%p)*(M[i]))%p print "C = ",C
return C
def Dekripsi(publicKey, C, A): p = int(publicKey[2]) print p
print "C.length =", len(C) for i in range(0, len(C)): exp = p-1-A
mytemp = pow(C[i][0], exp) % p M[i] = (mytemp * C[i][1])%p return M
2.
PengujianMillerSelfridgeRabin.py
from random import randint import timeit
global k
def pengujianMSR(n):
msrTimer1 = timeit.default_timer() t=1
k=0 m = n - 1 while(m%2==0): t=t+1 m = m/2 MSRlist =[]
for k in range(0,20): a = randint(2,n-2) MSRlist.append(a)
while(MSRlist.count(a)>0): a = randint(2,n-2) x = (pow(a,m))%n
if(t==1 and (x!=1 or x != n-1)): return False elif(x==1 or x == n-1):
continue else:
j=1
while(j<t-1): del x
x = (pow(2,j))*m x = (pow(a,x))%n if(x==1):
return False elif(x==n-1): break continue else:
j+=1 del x
x = (pow(2,(t-1)))*m x = (pow(a,x))%n if(x==n-1): break
else: return False print n
msrTimer2 = timeit.default_timer() return True
3.
AkarPrimitifGauss.py
from math import sqrt from random import randint import timeit
def GaussForPrimitiveRoot(p):
gaussTimer1 = timeit.default_timer() m = randint(2,p)
t=1
diekonter=0 while(True): thisList =[0] diekonter+=1
while((pow(m,t)%p)!=1):
thisList.append(pow(m,t)%p) t+=1
if(t==p-1):
gaussTimer2 = timeit.default_timer()
print "pembangkitan alpha =",gaussTimer2-gaussTimer1,"s"
return m else:
b = randint(2,p-2)
while(thisList.count(b)>0): b = randint(2,p-2) u = OrderCounter(b, p) print "u =",u
if(u==p-1):
gaussTimer2 = timeit.default_timer() return b
else:
v = lcm(t, u) a = brent(v) c = v/a if(v==p-1):
ap = pow(m,(t/a))%p
ap = (ap*(pow(b,(u/c)[p])))%p
gaussTimer2 = timeit.default_timer() return ap
else:
del thisList
m = ((pow(m,(t/a))%p)*(pow(b,(u/c))%p))%p print "m",diekonter," yang baru =",m pass
pass pass continue
def OrderCounter(alpha, p): order=1
while((pow(alpha,order))%p!=1): order+=1
return order
def gcd(x,y): while y > 0:
def lcm(x, y):
return (x*y)/(gcd(x, y))
def FaktorisasiFermat(N): global factor1
global factor2 s = ceil(sqrt(N)) u = (s*2)+1 v = 1 r = (s*s)-N while(r!=0): if(r>0):
while(r>0): r = r - v v = v + 2 continue else:
r = r + u u = u + 2 continue
factor1 = ((u + v) - 2)/2 factor2 = (u - v)/2
4.
Step1.py (Index Calculus)
from random import randint, random import sys
sys.path.append("C:\\jython2.7.0\\jama\\Jama-1.0.3.jar")
sys.path.append( "C:\\java\jblas\\mikiobraun-jblas-8213dba\\jblas-1.2.4.jar")
sys.path.append("C:\\jython2.7.0\\JyNI\\JyNI.jar")
sys.path.append('C:\\java\\apache common math\\commons-math3-3.6.1.jar')
sys.path.append('C:\\jython2.7.0\\SCPSolver.jar') from Jama import Matrix, LUDecomposition ,
SingularValueDecomposition as svd, CholeskyDecomposition as chol from org.apache.commons.math3.linear import DecompositionSolver, Array2DRowFieldMatrix,\
RealMatrix, RealVector, ArrayRealVector, MatrixUtils, Array2DRowRealMatrix, LUDecomposition,\
QRDecomposition, CholeskyDecomposition, EigenDecomposition as myEigen
myFactorbase = [ , ,…,79 9]
global factor1, factor2 myReporter = ""
randomB = None gloc = None primus = None be = None akP = None
def logFB(alpha, prima, fb): #initiating
bound = prima-2 global expList
expList = [0]*len(fb)
LFB = [[0]*len(fb) for x in xrange(len(fb))] fbLength = len(fb)
i=0
while(i<fbLength):
exp = randint(2, bound)
while(expList.count(exp)>0 or exp<=2): exp = randint(2, bound)
expList[i]=exp
beta = pow(alpha,exp) beta = beta%prima j=fbLength
for j in range(fbLength-1, -1, -1): print i,". j = ",j," | beta = ",beta if(j==0 and beta > fb[fbLength-1]): x=0
while(x<fbLength): LFB[i][x]=0 x+=1
print "disini i =",i i=i-1
break else:
while(beta % fb[j]==0 and beta>1): LFB[i][j]+=1
beta = beta/fb[j] if(beta==1):
pass else:
continue return LFB
def IndexCalculusFinale(B, p, alpha, s): global primus
global akP global be primus = p akP = alpha be = B i=0 fb=[] i=0
while(myFactorbase[i] <= s): fb.append(myFactorbase[i]) i+=1
global gFB
realMatrixExp = MatrixUtils.createRealMatrix(len(fb), 1) while(i<len(fb)):
exp = randint(2, bound)
print LFB
myReporter+=str(FBlog[i]) myReporter+=" = "
myReporter+=str(FBlog[i]*GammaIndex[i]) myReporter+="\n"
GammaIndex[i],"*log",fb[i],"=",GammaIndex[i],"*",FBlog[i],"=",FBlog[ i]*GammaIndex[i]
temp += (FBlog[i]*GammaIndex[i]) i+=1
if(i==len(fb)): temp = (temp-exp) temp = temp%newp global gloc gloc = temp return temp
5.
myIOControl.py
from java.io import FileReader, BufferedReader from javax.swing import JFileChooser
from math import floor import timeit
from __builtin__ import str
def myTimer():
start = timeit.timeit() print "hello"
end = timeit.timeit() return end - start
def expTester(a, b, p): return pow(a, b)%p
def fileBrowser():
myFileChooser = JFileChooser()
rVal = int(myFileChooser.showOpenDialog(None)) print rVal
if(rVal == JFileChooser.APPROVE_OPTION):
theName = myFileChooser.getSelectedFile().getName() thePath = myFileChooser.getCurrentDirectory().toString() try:
myPath = theName + "/" + thePath fileReader = FileReader(myPath)
bufferedReader = BufferedReader(fileReader) inputFile=""
textFieldReadable = bufferedReader.readLine() while(textFieldReadable!=None):
inputFile+=textFieldReadable inputFile+="\n"
return inputFile
except(RuntimeError, TypeError, NameError): print "eror"
for line_no, line in enumerate(f): if len(line.strip()) != 32: print line_no, line for line in f:
for i in range(0, 3) and (line[i]!=" "): print line[i]
return line f.close()
def arraySplitter(M):
M2D = [[0 for j in range(2)] for i in range(len(M)/2)] # [[0 for j in range(2)] for i in range((len(M))/2)]#[[0] * (len(M)/2)] * 2
#print M2D i=0
print len(M) j=0
while i<len(M):
ind = floor((i+1)/2) ind = int(ind) if(i % 2 == 0): M2D[j][0] = M[i] elif(i % 2 == 1): M2D[j][1] = M[i] j+=1
i+=1 return M2D
def returnItToString(M): i=0
myString = ""
for i in range(0,len(M)):
myString = myString + str(unichr(M[i])) return myString
def cypherTxtToList(path): f = open(path)
x = []
for word in f.read().split(): print(word)
x.append(int(word)) print x
return x
def txtToWordsList(path): f = open(path)
x = []
for word in f.read().split(): #print(word)
x.append(word) print x
def saveDecryptedText(theString, myFile, myType): fileName = "D:\target/"+myFile+myType
my_file.close()
dieString+="log Beta = "
#dieString+="= " j=0
while(j<len(coef)): if(coef[j]>0): if(j>0):
dieString+=" + " dieString+=str(coef[j])
dieString+="*"
dieString+=str(A[j]) j+=1
dieString+=" - "
dieString+=str(expo) dieString+=" mod "
dieString+=str(gP-1) dieString+="\n"
if(Ax!=int(Ax)): Ax = round(Ax, 3) else:
Ax = int(Ax)
dieString+="log Beta = "
dieString+=str(Ax) return dieString
def derGMDdrucker(fBase, genMat, genGam): toPrint = ""
toPrint+="\n"
toPrint+="factor base"
for i in range(0, len(genMat)): toPrint+="\t"
toPrint+=str(fBase[i]) i+=1
if(i==len(genMat)): toPrint+="\t"
toPrint+="Gamma"
i=0
toPrint+="\n"
for i in range(0, len(genGam)): toPrint+="\n"
toPrint+="\t\t"
for j in range(0, len(genMat)): toPrint+=str(genMat[i][j]) toPrint+="\t"
j+=1
if(j==len(genMat)):
toPrint+=str(genGam[i]) i+=1
return toPrint
def derReddrucker(fBase, gReductedIC): toPrint = ""
for i in range(0, len(gReductedIC)): toPrint+="log "
toPrint+=str(fBase[i]) toPrint+=" = "
toPrint+="\n"