Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ADFGVX="ADFGVX"
- dict={'A': 0,'D': 1,'F': 2,'G': 3,'V': 4,'X': 5}
- def cutKey(key):
- x=""
- while key:
- x+=key[0]
- key=key.replace(key[0],"")
- return x
- def cutMsg(msg):
- ret=""
- for i in msg:
- if (ord(i)>=ord("a") and ord(i)<=ord("z"))or(ord(i)>=ord("0") and ord(i)<=ord("9")):
- ret+=i
- return ret
- def findInAlphabet(x,a):
- i=0
- while i<len(a):
- if a[i]==x:
- return str(ADFGVX[i//6]+ADFGVX[i%6])
- i+=1
- print(x)
- return '_'
- def encode(message, secret_alphabet, keyword):
- mat=[]
- message=message.lower()
- message=message.replace(" ","")
- message=cutMsg(message)
- print(message)
- word=""
- for i in message:
- word+=findInAlphabet(i,secret_alphabet)
- #print(word)
- key=cutKey(keyword)
- for a in key:
- mat.append([a])
- i=0
- while i < len(word):
- mat[i%len(key)].append(word[i])
- i+=1
- mat=sorted(mat, key=lambda x: x[0])
- #print(mat)
- message=""
- i=1
- for j in mat:
- while i<len(j):
- message+=j[i]
- i+=1
- i=1
- print(message)
- return message
- def decode(message, secret_alphabet, keyword):
- keyword=cutKey(keyword)
- key=sorted(keyword)
- print(keyword)
- mat=[]
- for i in key:
- mat.append([i])
- i=0
- temp=len(message)+len(keyword)-(len(message)%len(keyword))
- #print(temp)
- d=len(message)
- while i<len(keyword):
- #print(keyword.find(key[i]))
- #print(d%len(keyword))
- #print((key[i].find(keyword))>=(d%len(keyword)))
- if keyword.find(key[i])>=d%len(keyword):
- #print("tutaj")
- for j in range(temp//len(keyword)-1):
- mat[i].append(message[0])
- message=message[1:]
- elif message:
- for j in range(temp//len(keyword)):
- if message:
- mat[i].append(message[0])
- message=message[1:]
- i+=1
- word=""
- mat=sorted(mat, key=lambda x: keyword.find(x[0]))
- #print(mat)
- z=0
- for j in range(1,temp//len(keyword)+1):
- for i in range(len(key)):
- if j<len(mat[i]):
- word+=mat[i][j]
- z+=1
- i=0
- #print(word)
- ans=""
- while i<len(word):
- ans+=secret_alphabet[dict[word[i]]*6+dict[word[i+1]]]
- i+=2
- #print(ans)
- return ans
- if __name__ == '__main__':
- assert encode("I am going",
- "dhxmu4p3j6aoibzv9w1n70qkfslyc8tr5e2g",
- "cipher") == 'FXGAFVXXAXDDDXGA', "encode I am going"
- assert decode("FXGAFVXXAXDDDXGA",
- "dhxmu4p3j6aoibzv9w1n70qkfslyc8tr5e2g",
- "cipher") == 'iamgoing', "decode I am going"
- assert encode("attack at 12:00 am",
- "na1c3h8tb2ome5wrpd4f6g7i9j0kjqsuvxyz",
- "privacy") == 'DGDDDAGDDGAFADDFDADVDVFAADVX', "encode attack"
- assert decode("DGDDDAGDDGAFADDFDADVDVFAADVX",
- "na1c3h8tb2ome5wrpd4f6g7i9j0kjqsuvxyz",
- "privacy") == 'attackat1200am', "decode attack"
- assert encode("ditiszeergeheim",
- "na1c3h8tb2ome5wrpd4f6g7i9j0kjqsuvxyz",
- "piloten") == 'DFGGXXAAXGAFXGAFXXXGFFXFADDXGA', "encode ditiszeergeheim"
- assert decode("DFGGXXAAXGAFXGAFXXXGFFXFADDXGA",
- "na1c3h8tb2ome5wrpd4f6g7i9j0kjqsuvxyz",
- "piloten") == 'ditiszeergeheim', "decode ditiszeergeheim"
- assert encode("I am going",
- "dhxmu4p3j6aoibzv9w1n70qkfslyc8tr5e2g",
- "weasel") == 'DXGAXAAXXVDDFGFX', "encode weasel == weasl"
- assert decode("DXGAXAAXXVDDFGFX",
- "dhxmu4p3j6aoibzv9w1n70qkfslyc8tr5e2g",
- "weasel") == 'iamgoing', "decode weasel == weasl"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement