Вы не можете сделать это с ха sh
Вы должны использовать шифр, например AES Cipher
Пример:
from Crypto.Cipher import AES
def resize_length(string):
#resizes the String to a size divisible by 16 (needed for this Cipher)
return string.rjust((len(string) // 16 + 1) * 16)
def encrypt(url, cipher):
# Converts the string to bytes and encodes them with your Cipher
return cipher.encrypt(resize_length(url).encode())
def decrypt(text, cipher):
# Converts the string to bytes and decodes them with your Cipher
return cipher.decrypt(text).decode().lstrip()
# It is important to use 2 ciphers with the same information, else the system breaks (at least for me)
# Define the Cipher with your data (Encryption Key and IV)
cipher1 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
cipher2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
decrypt(encrypt("https://booking.com", cipher1), cipher2)
Это должно вернуть https://booking.com.
Редактировать: Если вы хотите иметь закодированную строку в шестнадцатеричном формате, вы можете использовать комбинацию join и format в комбинации.
Например,
#For encoding
cipherstring = cipher.encrypt(resize_length(url).encode())
cipherstring = "".join("{:02x}".format(c) for c in cipherstring)
#For decoding
text = bytes.fromhex(text)
original_url = cipher.decrypt(text).decode().lstrip()
"" .join ("{: 02x}". Формат (c) для c в зашифрованной строке)
означает, что каждый символ кодируется в шестнадцатеричном формате и список символов объединяется с разделителем "" (он преобразуется в строку)