Декодировать строку, используя python || SHA256 - PullRequest
0 голосов
/ 18 января 2020

В настоящее время я использую библиотеку hashlib в python для шифрования URL-адреса с помощью SHA256. Ниже приведен код.

import hashlib
url='https://booking.com'
hs = hashlib.sha256(url.encode('utf-8')).hexdigest()
print(hs) # 037c89f2570ac1cff92d67643f570bec93ebea7f0222e105616590a9673be21f

Теперь я хочу расшифровать и вернуть URL-адрес. Может кто-нибудь сказать мне, как это сделать?

1 Ответ

2 голосов
/ 18 января 2020

Вы не можете сделать это с ха 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 в зашифрованной строке)
означает, что каждый символ кодируется в шестнадцатеричном формате и список символов объединяется с разделителем "" (он преобразуется в строку)

...