Хотя мне нравится ответ Александра Кононенко (я не знал о Слагфилде, спасибо за то, что указал на это), возможно, все же стоит использовать очень упрощенный подход:
import base64
partnr='23'
partobf=base64.b32encode((bytes(partnr, 'utf-8'))).decode('utf-8').replace('=', '')
print(partobf)
# reverse it, if you need to deduce a part number from a given URL
partnrb=base64.b32decode('{}{}'.format(partobf, '='*(8-len(partobf)%8))).decode('utf-8')
print(partnrb)
Выходные данные:
GIZQ
23
Это работает для любой строки (не только числа) и легко обратимо.Вместо Base32 вы также можете использовать Base64 или любую другую кодировку, в которой используются символы, совместимые с URL-адресами.Используя этот метод, вы можете преобразовать любой идентификатор из открытого текста в запутанный текст без словаря, в котором хранятся оба значения.
Однако важно указать, что ничего из этого (а также нет)остальные ответы, присутствующие в ветке до сих пор) имеют отношение что-либо к шифрованию.Так что, вероятно, ОП должен сменить заголовок.