import sys
def rotate(walzeIn,r=False):
if(r):
walzeIn.insert(25, walzeIn.pop(0))
else:
walzeIn.insert(0,walzeIn.pop())
return walzeIn
def encrypt(plainText,X1E,X2E,X3E,XUE,offset1,offset2,offset3,r=False):
count1=offset1
count2=offset2
count3=offset3
for i in range(count1):
if count1==0:
break
rotate(X1E,r)
for i in range(count2):
if count2==0:
break
rotate(X2E,r)
for i in range(count3):
if count3==0:
break
rotate(X3E, r)
encryptedText=""
for i in plainText:
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]
rotate(X1E,r)
count1 += 1
if(count1==25):
rotate(X2E,r)
count2 += 1
count1=0
if(count2==25):
rotate(X3E,r)
count3 += 1
count2 = 0
if(count3==25):
count3=0
encryptedText+=letter
return encryptedText
def decrypt(encryptedText,X1D,X2D,X3D,XUD,offset1,offset2,offset3,r=False):
count1=offset1
count2=offset2
count3=offset3
for i in range(count1):
if count1==0:
break
rotate(X1D,r)
for i in range(count2):
if count2==0:
break
rotate(X2D,r)
for i in range(count3):
if count3==0:
break
rotate(X3D, r)
plainText=""
for i in encryptedText:
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]
rotate(X1D,r)
count1 += 1
if (count1 == 25):
rotate(X2D,r)
count2 += 1
count1 = 0
if (count2 == 25):
rotate(X3D,r)
count3 += 1
count2 = 0
if (count3 == 25):
count3 = 0
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"
count1=0
count2=0
count3=0
X1E=list(X1)
X2E=list(X2)
X3E=list(X3)
XUE=list(XU)
dekrypto=""
krypto=""
#kryptText=encrypt(klarText,X1E,X2E,X3E,XUE,count1,count2,count3,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(27):
for j in range(27):
for k in range(27):
X1D = list(X1)
X2D = list(X2)
X3D = list(X3)
XUD = list(XU)
dekrypto = decrypt(kryptText,X1D,X2D,X3D,XUD,k,j,a,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))
sys.exit(0)