Простой способ сделать это - перечислить все символы, разрешенные в URL-адресе, которые не являются буквенно-цифровыми - я быстро выбрал быстрый поиск в Интернете: $ -_. +! * '(); / ?: @ = & - и просто как-то их кодировать. В моем списке 17 символов, и самый простой способ их кодирования без потери разборчивости, о котором я могу подумать, - это выбрать один буквенно-цифровой символ, скажем s, в качестве кода смены:
$ ⇒ s0 - ⇒ s1 _ ⇒ s2 . ⇒ s3 + ⇒ s4 ! ⇒ s5
* ⇒ s6 ' ⇒ s7 ( ⇒ s8 ) ⇒ s9 ; ⇒ sa / ⇒ sb
? ⇒ sc : ⇒ sd @ ⇒ se = ⇒ sf & ⇒ sg s ⇒ ss
Другой подход заключается в преобразовании исходного URL-адреса в битовый поток, предпочтительно с некоторым алгоритмом сжатия, поскольку вы уже утратили разборчивость, и затем назначением буквенно-цифрового символа для каждой возможной 6-битной последовательности. Обратите внимание, что в результате остаются 4 буквенно-цифровых символа, которые вы никогда не используете - вы можете вернуть их, если действительно заботитесь о длине, но вряд ли это стоит осложнений.
Я проигнорирую слово "крипто" в теме, так как вы, кажется, не заинтересованы в том, чтобы усложнить обнаружение схемы.