* Text för kryptering kan vara både stora och små bokstäver, men enbart engelska bokstäver
* Blanksteg hanteras som Z i koden, skriver man något med Z får man ett blanksteg istället
Det finns nu(efter minskningen av stegen) något färre nycklar, totalt är nyckelstorleken ca 72-bitar, fortfarande säkert.
Där finns några "ful lösningar" i koden jag ska ge mig in på att försöka fixa, bland annat hur jag ska kunna sätta arrayernas längd efter hur mycket utrymme texten tar. Sedan är också frågan, vad ska chiffret heta?
Kod: Markera allt
import array as arr
#Detta är dom fyra kodhjulen
a = arr.array('l', [12,24,16,3,11,4,7,21,19,22,6,1,20,14,15,9,10,25,5,13,23,2,8,17,18,0])
b = arr.array('l', [4,9,18,10,8,13,24,7,5,2,22,14,3,1,25,11,20,0,19,6,15,16,21,23,12,17])
c = arr.array('l', [10,14,4,11,25,17,5,21,23,0,13,18,24,7,1,15,22,20,16,2,6,8,9,3,19,12])
d = arr.array('l', [6,21,19,1,22,18,10,7,3,14,11,15,16,0,8,20,24,25,5,9,23,2,17,13,4,12])
e = arr.array('l', [10,6,24,13,9,25,3,16,23,8,19,15,22,12,21,17,5,1,18,7,2,11,0,20,14,4])
f = arr.array('l', [1,11,17,7,13,16,21,2,24,23,12,4,20,19,15,6,25,14,10,0,18,8,5,22,9,3])
g = arr.array('l', [12,24,16,3,11,4,7,21,19,22,6,1,20,14,15,9,10,25,5,13,23,2,8,17,18,0])
h = arr.array('l', [4,9,18,10,8,13,24,7,5,2,22,14,3,1,25,11,20,0,19,6,15,16,21,23,12,17])
i = arr.array('l', [6,21,19,1,22,18,10,7,3,14,11,15,16,0,8,20,24,25,5,9,23,2,17,13,4,12])
j = arr.array('l', [1,11,17,7,13,16,21,2,24,23,12,4,20,19,15,6,25,14,10,0,18,8,5,22,9,3])
#Meddelandenyckel
msgkey = arr.array('l', [21,5,21,3,6,3,22,13,8,21])
#Meddelandenyckel
pinkey = arr.array('l', [1,15,10,4,6,3,2,1,9,1])
#Meddelandet som ska kodas
msg = arr.array('l', [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])
#mata in text kortare än 256 tecken
message = input("Enter message(<256): ")
if len(message) > 256:
print('Message too long')
exit()
for xy in range(len(message)):
if ord(message[xy]) == 32:
msg[xy] = 25
elif ord(message[xy]) > 96 and ord(message[xy]) < 123:
msg[xy] = ord(message[xy])-97
else:
msg[xy] = ord(message[xy])-65
#det krypterade meddelandet
enc = arr.array('l',[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92])
#det dekrypterade meddelandet
dec = arr.array('l',[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92])
#Kodinställning, startpossition per hjul
PosA = msgkey[0]
PosB = msgkey[1]
PosC = msgkey[2]
PosD = msgkey[3]
PosE = msgkey[4]
PosF = msgkey[5]
PosG = msgkey[6]
PosH = msgkey[7]
PosI = msgkey[8]
PosJ = msgkey[9]
#skriv ut meddelandet
#print('Meddelande: ',msg)
#Kyptering
print('Encrypted text: ', end = '')
for x in range(len(message)):
PosY = (PosA+msg[x])%26
outbyte = a[PosY]
PosX = (PosB+outbyte)%26
outbyte = b[PosX]
PosZ = (PosC+outbyte)%26
outbyte = c[PosZ]
PosY1 = (PosD+outbyte)%26
outbyte = d[PosY1]
PosY2 = (PosE+outbyte)%26
outbyte = e[PosY2]
PosY3 = (PosF+outbyte)%26
outbyte = f[PosY3]
PosY4 = (PosG+outbyte)%26
outbyte = g[PosY4]
PosY5 = (PosH+outbyte)%26
outbyte = h[PosY5]
PosY6 = (PosI+outbyte)%26
outbyte = i[PosY6]
PosY7 = (PosJ+outbyte)%26
outbyte = j[PosY7]
enc[x] = outbyte
print(chr(outbyte+65), end = '')
#Rotering av hjul, efter pinkey.
PosA = PosA + pinkey[0]
PosB = PosB + pinkey[1]
PosC = PosC + pinkey[2]
PosD = PosD + pinkey[3]
PosE = PosE + pinkey[4]
PosF = PosF + pinkey[5]
PosG = PosG + pinkey[6]
PosH = PosH + pinkey[7]
PosI = PosI + pinkey[8]
PosJ = PosJ + pinkey[9]
#print('Krypterat: ',enc)
#Dekryptering, börja med att nollställa nyckeln
PosA = msgkey[0]
PosB = msgkey[1]
PosC = msgkey[2]
PosD = msgkey[3]
PosE = msgkey[4]
PosF = msgkey[5]
PosG = msgkey[6]
PosH = msgkey[7]
PosI = msgkey[8]
PosJ = msgkey[9]
print()
kodat = input("Enter coded text: ")
for xent in range(len(kodat)):
enc[xent] = ord(kodat[xent])-65
#for x22 in range(len(kodat)):
yent = 0
#Dekryptera, baklänges genom hjulen
for y in range(len(kodat)):
for x in range(26):
if j[x] == enc[y]:
valJ = (x-PosJ)%26
for x in range(26):
if i[x] == valJ:
valI = (x-PosI)%26
for x in range(26):
if h[x] == valI:
valH = (x-PosH)%26
for x in range(26):
if g[x] == valH:
valG = (x-PosG)%26
for x in range(26):
if f[x] == valG:
valF = (x-PosF)%26
for x in range(26):
if e[x] == valF:
valE = (x-PosE)%26
for x in range(26):
if d[x] == valE:
valD = (x-PosD)%26
for x in range(26):
if c[x] == valD:
valC = (x-PosC)%26
for x in range(26):
if b[x] == valC:
valB = (x-PosB)%26
for x in range(26):
if a[x] == valB:
valA = (x-PosA)%26
dec[y] = valA
#Rotera hjulen efter pinkey
PosA = PosA + pinkey[0]
PosB = PosB + pinkey[1]
PosC = PosC + pinkey[2]
PosD = PosD + pinkey[3]
PosE = PosE + pinkey[4]
PosF = PosF + pinkey[5]
PosG = PosG + pinkey[6]
PosH = PosH + pinkey[7]
PosI = PosI + pinkey[8]
PosJ = PosJ + pinkey[9]
#Skriv ut den dekrypterade texten
#print("Dekrypterat: ",dec)
print('Decrypted text: ', end ='' )
for bx in range(len(dec)):
if dec[bx] == 25:
print(' ', end = '')
else:
print(chr(dec[bx]+65), end = '')