Skip to content

Instantly share code, notes, and snippets.

@rsheldiii
Created June 26, 2012 19:23
Show Gist options
  • Save rsheldiii/2998215 to your computer and use it in GitHub Desktop.
Save rsheldiii/2998215 to your computer and use it in GitHub Desktop.
adfgvx encryptor/decryptor
def normalize(plainString,scrambledAlphabet):
plainString = plainString.upper().replace("J","I")
for letter in plainString:
if letter not in scrambledAlphabet:
plainString = plainString.replace(letter,'')
#print(plainString)
return plainString
def randLetters(number):
adfgvxIndex = ['A','D','F','G','V','X']
import random
random.seed()
answer = ""
for i in range(0,number):
answer += adfgvxIndex[random.randint(0,5)]
return answer
def encodingDict(scrambledAlphabet):
adfgvxIndex = ['A','D','F','G','V','X']
encodeDict = {}
for i in range(0,6):
for j in range(0,6):
encodeDict[scrambledAlphabet[i*6+j]] = adfgvxIndex[i]+adfgvxIndex[j]
return encodeDict
def Encrypt(plainString,scrambledAlphabet,codeWord):
if len(scrambledAlphabet) != 36:
print("alphabet incorrect")
return
plainString = normalize(plainString,scrambledAlphabet)
encodeDict = encodingDict(scrambledAlphabet)
halfEncryptedString = "".join([encodeDict[letter] for letter in plainString])
halfEncryptedString += randLetters(len(halfEncryptedString)%len(codeWord))
#halfEncryptedString += "FGFADF"
sortArray = []
for i in range(0,len(codeWord)):
row = []
for j in range(0,len(halfEncryptedString)//len(codeWord)):
row.append(halfEncryptedString[j*len(codeWord)+i])
sortArray.append((codeWord[i],row))
sortArray.sort(key=lambda a: a[0])
for key,value in sortArray:
print("".join(value),end="")
print()
def Decrypt(encryptedString,scrambledAlphabet,codeWord):
codeWord = [letter for letter in codeWord]
sortedCodeWord = codeWord[:]
sortedCodeWord.sort()
encryptedGrid = []
chunkLength = len(encryptedString) // len(codeWord)
for letter in sortedCodeWord:
encryptedGrid.append((letter,encryptedString[:chunkLength]))
encryptedString = encryptedString[chunkLength:]
sortedEncryptedGrid = []
for letter in codeWord:
for i in range(0,len(encryptedGrid)):
item = encryptedGrid[i]
if item[0] == letter:
sortedEncryptedGrid.append(encryptedGrid.pop(i)[1])
break
encryptedString = ""
for i in range(0,len(sortedEncryptedGrid[i])):
for j in range(0,len(sortedEncryptedGrid)):
encryptedString += sortedEncryptedGrid[j][i]
encodeDict = encodingDict(scrambledAlphabet)
encodeDict = {value:key for key,value in encodeDict.items()}#reverse
decryptedString = ""
for i in range(0,len(encryptedString),2):
target = encryptedString[i:i+2]
decryptedString += encodeDict[target]
print(decryptedString)
Encrypt("Brake me out of jail on the 21st.","R3FLMX7KWQ69D4Y5NOZ STV2EH8AP1ICBGU0","PROGRAMMER")
Decrypt("GADGVDGVFAAGVDAVGAXAGDGFXGGFDDXADXAAAGXFVGXGXGGVGFDVDDDFVVGVFGFAXFGGXF","R3FLMX7KWQ69D4Y5NOZ STV2EH8AP1ICBGU0","PROGRAMMER")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment