#!python
import sys
def rotate(walzeIn):
walzeIn.insert(0, walzeIn.pop())
return walzeIn
def encrypt(plainText, X1E, X2E, X3E, XUE, offset1, offset2, offset3,offset4,notch1,notch2, r=False):
count1 = notch1
count2 = notch2
count3 = 0
if r:
X1E.reverse()
X2E.reverse()
X3E.reverse()
for i in range(offset1):
if offset1 == 0:
break
rotate(X1E)
for i in range(offset2):
if offset2 == 0:
break
rotate(X2E)
for i in range(offset3):
if offset3 == 0:
break
rotate(X3E)
for i in range(offset4):
if offset4 == 0:
break
rotate(XUE)
encryptedText = ""
for i in plainText:
count1 += 1
rotate(X1E)
if (count1 == 25):
rotate(X2E)
count2 += 1
count1 = 0
if (count2 == 25):
rotate(X3E)
count3 += 1
count2 = 0
if (count3 == 25):
count3 = 0
letter = i
chiffre = ALPHABET.index(letter)
letter = X1E[chiffre]
chiffre = ALPHABET.index(letter)
letter = X2E[chiffre]
chiffre = ALPHABET.index(letter)
letter = X3E[chiffre]
chiffre = ALPHABET.index(letter)
letter = XUE[chiffre]
chiffre = ALPHABET.index(letter)
letter = X3E[chiffre]
chiffre = ALPHABET.index(letter)
letter = X2E[chiffre]
chiffre = ALPHABET.index(letter)
letter = X1E[chiffre]
encryptedText += letter
return encryptedText
def decrypt(encryptedText, X1D, X2D, X3D, XUD, offset1, offset2, offset3,offset4,notch1,notch2, r=False):
count1 = notch1
count2 = notch2
count3 = 0
if r:
X1D.reverse()
X2D.reverse()
X3D.reverse()
for i in range(offset1):
if offset1 == 0:
break
rotate(X1D)
for i in range(offset2):
if offset2 == 0:
break
rotate(X2D)
for i in range(offset3):
if offset3 == 0:
break
rotate(X3D)
for i in range(offset4):
if offset4 == 0:
break
rotate(XUD)
plainText = ""
for i in encryptedText:
count1 += 1
rotate(X1D)
if (count1 == 25):
rotate(X2D)
count2 += 1
count1 = 0
if (count2 == 25):
rotate(X3D)
count3 += 1
count2 = 0
if (count3 == 25):
count3 = 0
letter = i
chiffre = X1D.index(letter)
letter = ALPHABET[chiffre]
chiffre = X2D.index(letter)
letter = ALPHABET[chiffre]
chiffre = X3D.index(letter)
letter = ALPHABET[chiffre]
chiffre = XUD.index(letter)
letter = ALPHABET[chiffre]
chiffre = X3D.index(letter)
letter = ALPHABET[chiffre]
chiffre = X2D.index(letter)
letter = ALPHABET[chiffre]
chiffre = X1D.index(letter)
letter = ALPHABET[chiffre]
plainText += letter
return plainText
if __name__ == '__main__':
ALPHABET = [chr(x) for x in range(0x41, 0x41 + 26)]
####['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5']
X1 = ['B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M','U', 'S', 'Q', 'O']
####['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5']
X2 = ['A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y','F', 'V', 'O', 'E']
####['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5']
X3 = ['E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I','B', 'R', 'C', 'J']
####['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5']
XU = ['Y', 'R', 'U', 'H', 'Q', 'S', 'L', 'D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W','V','J', 'A', 'T']
# E = 'BGLRAOGHKRWRGSKCNSJAXXUUEXNSRXQUDXOSZHNIWLUVKXIPJSNJTM'
kryptText = "BGLRAOGHKRWRGSKCNSJAXXUUEXNSRXQUDXOSZHNIWLUVKXIPJSNJTM"
# kryptText = "RFVRQLTOEHZSFASDFASDFASDFSADFSADFSADFSDFSADFSADF"
klarText = "WETTERBERICHT"
# klarText="RFVRQLTOEHZSF"
offset1 = 0
offset2 = 3
offset3 = 0
offset4 = 0
notch1=2
notch2=2
X1E = list(X1)
X2E = list(X2)
X3E = list(X3)
XUE = list(XU)
dekrypto = ""
krypto = ""
#kryptText=encrypt(klarText,X1E,X2E,X3E,XUE,offset1,offset2,offset3,offset4,notch1,notch2,True)
print kryptText
# dekrypto=decrypt(kryptText,X1D,X2D,X3D,XUD,count1,count2,count3,False)
# print dekrypto
# print "orig", X1D
# for i in range(26):
# rotate(X1D,True)
# print i,X1D
for a in range(26):
for j in range(26):
for k in range(26):
for l in range(26):
for m in range(26):
for n in range(26):
X1D = list(X1)
X2D = list(X2)
X3D = list(X3)
XUD = list(XU)
dekrypto = decrypt(kryptText, X1D, X2D, X3D, XUD, k, j, a,l,n,m, True)
#print k, j, a
#print dekrypto
if ("WETTER" in dekrypto):
print dekrypto
print ('Walze 1: ' + str(k) + " Walze 2: " + str(j) + " Walze 3: " + str(a)+ " Walze 4: " + str(l))
print ('Notch 1: '+str(n), 'Notch 2: '+str(m))
sys.exit(0)
print ("Krypto not cracked")