Поскольку ROT13 отсутствует, поскольку он влияет только на альфы, почему бы просто не реализовать что-либо в большом наборе символов. Настройте массив from
символов, содержащий весь ваш набор печатных символов, и массив to
, содержащий те же символы в другом порядке.
Затем для каждого символа в вашей строке, если он находится в массиве from
, замените его эквивалентной позицией в массиве to
.
Это не дает никакого сжатия вообще, но удовлетворит все ваши требования (короче или такая же длина, замаскированная строка).
В псевдокоде что-то вроде:
chfrom = "ABCDEF..."
chto = "1$#zX^..."
def encode(s1):
s2 = ""
foreach ch in s1:
idx = chfrom.find(ch)
if idx == -1:
s2 += ch
else:
s2 += chto[idx]
return s2
def decode(s1):
# same as encode but swap chfrom and chto.