(27-06-2025, 10:57 AM)nablator wrote: You are not allowed to view links. Register or Login to view.I'm surprised that the curves in the last diagram are so close especially up to 3-grams, because your homophonic ciphertext must have a lot more symbols than CUVA and the (random?) choice of homophone must add a lot of entropy... how is it possible?
I attach the function to cipher:
def homophonic_cipher_3c(words):
letter_map = {c: [c + str(i) for i in range(3)] for c in 'abcdefghijklmnopqrstuvwxyz'}
out = []
for word in words:
new_word = ''.join(random.choice(letter_map.get(c, [c])) for c in word)
out.append(new_word)
return out
It's a simple homophonic cipher. First creates a letter map for each alphabetical character (so, each letter will have three different letters to choose randomly during the cipher).
In the cipher, I use alphabetical characters. Imagine that I use voynichese characters instead. I would use only the CUVA symbols. But beware, in order to decipher, it is tricky, as one CUVA symbol might be deciphered also into 3 natural language charaters. So there must be another hidden rule to decipher.

