Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Too heavy solution in Uncategorized category for ADFGVX Cipher by CDG.Axel
def encode(message: str, secret_alphabet: str, keyword: str):
message = ''.join(m for m in message.lower() if m.isalpha() or m.isdigit())
cipher = ['ADFGVX'[i] for m in message for i in divmod(secret_alphabet.find(m), 6)]
keyword = ''.join(e for i, e in enumerate(keyword) if keyword.find(e, 0, i) < 0)
he = -(-(lc := len(cipher)) // (lk := len(keyword)))
table = [['' if (idx := i * lk + j) >= lc else cipher[idx] for j in range(lk)] for i in range(he)]
table, translation = list(zip(*table)), {i: keyword.index(e) for i, e in enumerate(sorted(keyword))}
return ''.join(''.join(table[k]) for k in translation.values())
def decode(message, secret_alphabet, keyword):
keyword = ''.join(e for i, e in enumerate(keyword) if keyword.find(e, 0, i) < 0)
lc, lk, pos = len(message), len(keyword), 0
table = [None] * lk
for i, e in enumerate(sorted(keyword)):
idx = keyword.index(e)
shift = lc // lk + (idx < lc % lk)
table[idx], pos = message[pos:pos+shift].ljust((lc + lk - 1) // lk, ' '), pos + shift
cipher = ''.join(''.join(i) for i in zip(*table)).rstrip()
return ''.join(secret_alphabet['ADFGVX'.find(x) * 6 +'ADFGVX'.find(y)]
for x, y in zip(cipher[::2], cipher[1::2]))
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"
Oct. 21, 2021