LAMPIRAN-1
DAFTAR PUBLIKASI ILMIAH PENULIS (TESIS)
No
Judul Artikel
Penulis
Publikasi
(Seminar/Jurnal,
dll)
Waktu
Publikasi
Tempat
1
Hill Cipher
Pada Shamir’s
Three Pass
Protocol
Hasdiana,
Muhammad
Zarlis,
Rahmat
Widia
Sembiring,
Jamaludin
Procceding
Internasional
Conference On
Multidisiplinary
Research
16 – 18
Oktober
2014
Medan
2
Penerapan
Hybrid
Cryptosystem
Melalui
Kombinasi
Hill cipher
,
Vigenère
Dan
Rsa
Jamaludin,
Muhammad
Zarlis,
Rahmat
Widia
Sembiring,
Hasdiana
Procceding
Internasional
Conference On
Multidisiplinary
Research
16 – 18
Oktober
2014
Medan
3
4
LAMPIRAN-2
Listing Program
def isInverse(det): x = MOD
y = 1 while (1): y = x % det
'print("X = ", x, " Det = ", det, "Y = ", y)' if y == 0 and det == 1:
return 1
elif y == 0 and det != 1: return 0
x = det det = y
PT =
"INDONESIATANAHAIRBETAPUSA KAABADINANJAYAINDONESIASEJ AKDULUKALASELALUDIPUJAPUJA BANGSADISANATEMPATLAHIRBET ADIBUAIDIBESARKANBUNDATEMP ATBERLINDUNGDIHARITUATEMPA TAKHIRMENUTUPMATA"
pPT = len(PT) print("Plainteks :") print(PT)
print("panjang plainteks =", len(PT))
if len(PT) % 9 != 0: sisa = 9 - len(PT) % 9 'print("sisa :", sisa)' for i in range(sisa):
PT = PT + "Z" else:
sisa = 0
'print("sisa :", sisa)'
'print("Plainteks Hill Cipher :", PT)' print("\n")
M = []
JB = int(len(PT)/9) for j in range(JB):
M1 = []
for i in range(3): M0 = []
M0.append(ord(PT[j*9+i*3])-65) M0.append(ord(PT[j*9+i*3+1])-65) M0.append(ord(PT[j*9+i*3+2])-65) M1.append(M0)
M.append(M1)
'print("Matriks Plainteks Hill Cipher:")' for j in range(JB):
for i in M[j]: 'print(i)'
'print("\n")'
DetA = (KA[0][0] * ((KA[1][1]*KA[2][2]) -(KA[1][2]*KA[2][1]))) - \
(KA[0][1] * ((KA[1][0]*KA[2][2]) -(KA[1][2]*KA[2][0]))) + \
(KA[0][2] * ((KA[1][0]*KA[2][1]) -(KA[1][1]*KA[2][0])))
DetA = DetA % MOD 'print("Matriks Kunci A:")'
for i in KA: 'print(i)' 'print("\n")'
'print("Determinan :", DetA)' i = 1
while ((i * DetA) % MOD) != 1: i = i + 1
InvModulo = i
'print("Inverse Modulo = %i\n" % i)'
M11 = ((KA[1][1]*KA[2][2]) -(KA[1][2]*KA[2][1])) % MOD M12 = ((KA[1][0]*KA[2][2])
-(KA[1][2]*KA[2][0])) % MOD M13 = ((KA[1][0]*KA[2][1])
-(KA[1][1]*KA[2][0])) % MOD M21 = ((KA[0][1]*KA[2][2])
-(KA[0][2]*KA[2][1])) % MOD M22 = ((KA[0][0]*KA[2][2])
-(KA[0][2]*KA[2][0])) % MOD M23 = ((KA[0][0]*KA[2][1])
-(KA[0][1]*KA[2][0])) % MOD M31 = ((KA[0][1]*KA[1][2])
-(KA[0][2]*KA[1][1])) % MOD M32 = ((KA[0][0]*KA[1][2])
-(KA[0][2]*KA[1][0])) % MOD M33 = ((KA[0][0]*KA[1][1])
-(KA[0][1]*KA[1][0])) % MOD
Minor = [[M11,M12,M13], [M21,M22,M23], [M31,M32,M33]]
Kofaktor = [[M11*1,M12*-1,M13*1], [M21*-1,M22*1,M23*-1], [M31*1,M32*-1,M33*1]]
AdjA = [[Kofaktor[0][0], Kofaktor[1][0], Kofaktor[2][0]],
[Kofaktor[0][1], Kofaktor[1][1], Kofaktor[2][1]],
KA_I = [[InvModulo*AdjA[0][0] % MOD, InvModulo*AdjA[0][1] % MOD, InvModulo*AdjA[0][2] % MOD], [InvModulo*AdjA[1][0] % MOD,
InvModulo*AdjA[1][1] % MOD, InvModulo*AdjA[1][2] % MOD], [InvModulo*AdjA[2][0] % MOD,
InvModulo*AdjA[2][1] % MOD, InvModulo*AdjA[2][2] % MOD]]
'print("Matriks Kofaktor:")' for i in range(3):
'print(Kofaktor[i])' 'print("\n")'
'print("Adjoint Matrix:")' for i in range(3):
'print(AdjA[i])' 'print("\n")'
'print("Inverse Matriks Kunci A:")' for i in range(3):
'print(KA_I[i])' AkhirInvA = time.time()
'print("\nWaktu Eksekusi Invers A = ", AkhirInvA - AwalInvA, " Detik")' 'print("\n")'
inv = 0
while (inv == 0): KB = []
for i in range(3): M0 = []
M0.append(random.randint(0, MOD)) M0.append(random.randint(0, MOD)) M0.append(random.randint(0, MOD)) KB.append(M0)
(KB[0][1] * ((KB[1][0]*KB[2][2]) -(KB[1][2]*KB[2][0]))) + \
(KB[0][2] * ((KB[1][0]*KB[2][1]) -(KB[1][1]*KB[2][0])))
DetB = DetB % MOD 'print("Matriks Kunci B:")'
for i in KB: 'print(i)' 'print("\n")'
'print("Determinan :", DetB)' i = 1
while ((i * DetB) % MOD) != 1: i = i + 1
InvModulo = i
'print("Inverse Modulo = %i\n" % i)'
M11 = ((KB[1][1]*KB[2][2]) -(KB[1][2]*KB[2][1])) % MOD M12 = ((KB[1][0]*KB[2][2])
-(KB[1][2]*KB[2][0])) % MOD M13 = ((KB[1][0]*KB[2][1])
-(KB[1][1]*KB[2][0])) % MOD M21 = ((KB[0][1]*KB[2][2])
-(KB[0][2]*KB[2][1])) % MOD M22 = ((KB[0][0]*KB[2][2])
-(KB[0][2]*KB[2][0])) % MOD M23 = ((KB[0][0]*KB[2][1])
-(KB[0][1]*KB[2][0])) % MOD M31 = ((KB[0][1]*KB[1][2])
-(KB[0][2]*KB[1][1])) % MOD M32 = ((KB[0][0]*KB[1][2])
-(KB[0][2]*KB[1][0])) % MOD M33 = ((KB[0][0]*KB[1][1])
-(KB[0][1]*KB[1][0])) % MOD
Minor = [[M11,M12,M13], [M21,M22,M23], [M31,M32,M33]]
Kofaktor = [[M11*1,M12*-1,M13*1], [M21*-1,M22*1,M23*-1], [M31*1,M32*-1,M33*1]]
AdjB = [[Kofaktor[0][0], Kofaktor[1][0], Kofaktor[2][0]],
[Kofaktor[0][1], Kofaktor[1][1], Kofaktor[2][1]],
[Kofaktor[0][2], Kofaktor[1][2], Kofaktor[2][2]]]
KB_I = [[InvModulo*AdjB[0][0] % MOD, InvModulo*AdjB[0][1] % MOD, InvModulo*AdjB[0][2] % MOD], [InvModulo*AdjB[1][0] % MOD,
InvModulo*AdjB[1][1] % MOD, InvModulo*AdjB[1][2] % MOD], [InvModulo*AdjB[2][0] % MOD,
InvModulo*AdjB[2][1] % MOD, InvModulo*AdjB[2][2] % MOD]]
'print("Matriks Kofaktor:")' for i in range(3):
'print(Kofaktor[i])' 'print("\n")'
'print("Adjoint Matrix:")' for i in range(3):
'print(AdjB[i])' 'print("\n")'
'print("Inverse Matriks Kunci B:")' for i in range(3):
'print(KB_I[i])'
for j in range(JB): C0 = []
C0.append(((M[j][0][0] * KA[0][0]) + (M[j][0][1] * KA[1][0]) + (M[j][0][2] * KA[2][0])) % MOD)
C0.append(((M[j][0][0] * KA[0][1]) + (M[j][0][1] * KA[1][1]) + (M[j][0][2] * KA[2][1])) % MOD)
C0.append(((M[j][0][0] * KA[0][2]) + (M[j][0][1] * KA[1][2]) + (M[j][0][2] * KA[2][2])) % MOD)
C1.append(C0)
C0=[]
C0.append(((M[j][1][0] * KA[0][0]) + (M[j][1][1] * KA[1][0]) + (M[j][1][2] * KA[2][0])) % MOD)
C0.append(((M[j][1][0] * KA[0][1]) + (M[j][1][1] * KA[1][1]) + (M[j][1][2] * KA[2][1])) % MOD)
C0.append(((M[j][1][0] * KA[0][2]) + (M[j][1][1] * KA[1][2]) + (M[j][1][2] * KA[2][2])) % MOD)
C1.append(C0)
C0=[]
C0.append(((M[j][2][0] * KA[0][0]) + (M[j][2][1] * KA[1][0]) + (M[j][2][2] * KA[2][0])) % MOD)
C0.append(((M[j][2][0] * KA[0][1]) + (M[j][2][1] * KA[1][1]) + (M[j][2][2] * KA[2][1])) % MOD)
C0.append(((M[j][2][0] * KA[0][2]) + (M[j][2][1] * KA[1][2]) + (M[j][2][2] * KA[2][2])) % MOD)
C1.append(C0)
C1 = []
'print("Matriks CipherText 1:")' for j in range(JB):
for i in C[j]: 'print(i)' 'print("\n")' C1T =[] C1TT = []
for j in range(JB):
C1TTT = []
'print("Matriks CipherText 1 Transpose:")' print("Cipherteks-1:")
print(DT)
AkhirC1 = time.time()
print("\nWaktu Eksekusi Cipherteks-1 = ", AkhirC1 - AwalC1, " Detik")
'print("\n")' for j in range(JB):
C1 = []
C1.append(((KB[0][0] * C[j][0][0]) + (KB[0][1] * C[j][1][0]) + (KB[0][2] * C[j][2][0])) % MOD)
C1.append(((KB[0][0] * C[j][0][1]) + (KB[0][1] * C[j][1][1]) + (KB[0][2] * C[j][2][1])) % MOD)
C1.append(((KB[0][0] * C[j][0][2]) + (KB[0][1] * C[j][1][2]) + (KB[0][2] * C[j][2][2])) % MOD)
C2.append(C1)
C1=[]
C1.append(((KB[1][0] * C[j][0][0]) + (KB[1][1] * C[j][1][0]) + (KB[1][2] * C[j][2][0])) % MOD)
C1.append(((KB[1][0] * C[j][0][1]) + (KB[1][1] * C[j][1][1]) + (KB[1][2] * C[j][2][1])) % MOD)
C1.append(((KB[1][0] * C[j][0][2]) + (KB[1][1] * C[j][1][2]) + (KB[1][2] * C[j][2][2])) % MOD)
C2.append(C1)
C1=[]
C1.append(((KB[2][0] * C[j][0][0]) + (KB[2][1] * C[j][1][0]) + (KB[2][2] * C[j][2][0])) % MOD)
C1.append(((KB[2][0] * C[j][0][1]) + (KB[2][1] * C[j][1][1]) + (KB[2][2] * C[j][2][1])) % MOD)
C1.append(((KB[2][0] * C[j][0][2]) + (KB[2][1] * C[j][1][2]) + (KB[2][2] * C[j][2][2])) % MOD)
C2.append(C1) C0.append(C2) C2 = []
for i in C0[j]: 'print(i)' 'print("\n")' C2T =[] C2TT = []
for j in range(JB):
C2TTT = []
C2TTT.append((C0[j][0][0])) C2TTT.append((C0[j][1][0])) C2TTT.append((C0[j][2][0])) C2TT.append(C2TTT) C2TTT = []
C2TTT.append((C0[j][0][1])) C2TTT.append((C0[j][1][1])) C2TTT.append((C0[j][2][1])) C2TT.append(C2TTT) C2TTT = []
C2TTT.append((C0[j][0][2])) C2TTT.append((C0[j][1][2])) C2TTT.append((C0[j][2][2])) C2TT.append(C2TTT) C2T.append(C2TT) C2TT = []
print("\n")
'print("Matriks CipherText 2 Transpose:")' DT = ""
for j in range(JB): for i in C2T[j]:
'print(i)'
DT = DT + chr((i[0] + 65)) + chr((i[1] + 65)) + chr((i[2] + 65))
'print("\n")'
print("Cipherteks-2:") print(DT)
AkhirC2 = time.time()
print("\nWaktu Eksekusi Cipherteks-2 = ", AkhirC2 - AwalC2, " Detik")
print("\n")
for j in range(JB):
C2 = []
C2.append(((C0[j][0][0] * KA_I[0][0]) + (C0[j][0][1] * KA_I[1][0]) + (C0[j][0][2] * KA_I[2][0])) % MOD)
C2.append(((C0[j][0][0] * KA_I[0][1]) + (C0[j][0][1] * KA_I[1][1]) + (C0[j][0][2] * KA_I[2][1])) % MOD)
C2.append(((C0[j][0][0] * KA_I[0][2]) + (C0[j][0][1] * KA_I[1][2]) + (C0[j][0][2] * KA_I[2][2])) % MOD)
C3.append(C2) C2=[]
C2.append(((C0[j][1][0] * KA_I[0][0]) + (C0[j][1][1] * KA_I[1][0]) + (C0[j][1][2] * KA_I[2][0])) % MOD)
C2.append(((C0[j][1][0] * KA_I[0][1]) + (C0[j][1][1] * KA_I[1][1]) + (C0[j][1][2] * KA_I[2][1])) % MOD)
C2.append(((C0[j][1][0] * KA_I[0][2]) + (C0[j][1][1] * KA_I[1][2]) + (C0[j][1][2] * KA_I[2][2])) % MOD)
C3.append(C2)
C2=[]
C2.append(((C0[j][2][0] * KA_I[0][0]) + (C0[j][2][1] * KA_I[1][0]) + (C0[j][2][2] * KA_I[2][0])) % MOD)
C2.append(((C0[j][2][0] * KA_I[0][1]) + (C0[j][2][1] * KA_I[1][1]) + (C0[j][2][2] * KA_I[2][1])) % MOD)
C2.append(((C0[j][2][0] * KA_I[0][2]) + (C0[j][2][1] * KA_I[1][2]) + (C0[j][2][2] * KA_I[2][2])) % MOD)
C3.append(C2) C1.append(C3) C3 = []
'print("Matriks CipherText 3:")' for j in range(JB):
for i in C1[j]: 'print(i)' 'print("\n")' C3T =[] C3TT = []
for j in range(JB):
C3TTT = []
C3TTT.append((C1[j][0][0])) C3TTT.append((C1[j][1][0])) C3TTT.append((C1[j][2][0])) C3TT.append(C3TTT) C3TTT = []
C3TTT.append((C1[j][0][1])) C3TTT.append((C1[j][1][1])) C3TTT.append((C1[j][2][1])) C3TT.append(C3TTT) C3TTT = []
C3TTT.append((C1[j][0][2])) C3TTT.append((C1[j][1][2])) C3TTT.append((C1[j][2][2])) C3TT.append(C3TTT) C3T.append(C3TT) C3TT = []
'print("\n")'
'print("Matriks CipherText 3 Transpose:")' print("Cipherteks-3:")
AkhirC3 = time.time()
print("\nWaktu Eksekusi Cipherteks-3 = ", AkhirC3 - AwalC3, " Detik")
'print("\n")' for j in range(JB):
C3 = []
C3.append(((KB_I[0][0] * C1[j][0][0]) + (KB_I[0][1] * C1[j][1][0]) + (KB_I[0][2] * C1[j][2][0])) % MOD)
C3.append(((KB_I[0][0] * C1[j][0][1]) + (KB_I[0][1] * C1[j][1][1]) + (KB_I[0][2] * C1[j][2][1])) % MOD)
C3.append(((KB_I[0][0] * C1[j][0][2]) + (KB_I[0][1] * C1[j][1][2]) + (KB_I[0][2] * C1[j][2][2])) % MOD)
C4.append(C3)
C3=[]
C3.append(((KB_I[1][0] * C1[j][0][0]) + (KB_I[1][1] * C1[j][1][0]) + (KB_I[1][2] * C1[j][2][0])) % MOD)
C3.append(((KB_I[1][0] * C1[j][0][1]) + (KB_I[1][1] * C1[j][1][1]) + (KB_I[1][2] * C1[j][2][1])) % MOD)
C3.append(((KB_I[1][0] * C1[j][0][2]) + (KB_I[1][1] * C1[j][1][2]) + (KB_I[1][2] * C1[j][2][2])) % MOD)
C4.append(C3)
C3=[]
C3.append(((KB_I[2][0] * C1[j][0][0]) + (KB_I[2][1] * C1[j][1][0]) + (KB_I[2][2] * C1[j][2][0])) % MOD)
C3.append(((KB_I[2][0] * C1[j][0][1]) + (KB_I[2][1] * C1[j][1][1]) + (KB_I[2][2] * C1[j][2][1])) % MOD)
C3.append(((KB_I[2][0] * C1[j][0][2]) + (KB_I[2][1] * C1[j][1][2]) + (KB_I[2][2] * C1[j][2][2])) % MOD)
C4.append(C3) C2.append(C4) C4 = []
'print("\n")' DT = ""
'print("Matriks Plainteks:")'
for j in range(JB): for i in C2[j]:
'print(i)'
DT = DT + chr((i[0] + 65)) + chr((i[1] + 65)) + chr((i[2] + 65))
'print("\n")'
'print("Plainteks :", DT)' DT = DT[0:pPT]
print("\nPlainteks :") print(DT)
Akhir = time.time()