Не получается перевести числа в байты

Я пытаюсь реализовать алгоритм шифрования RSA.

На выходе получается зашифрованный текст в виде чисел. Но я хочу чтобы получился не просто набор цифр, а что то похожее на зашифрованный текст.

Спросив на форуме мне сказали "Лол, ну в байтах строку отдавай, как обычно и делают". НО в байтах это выглядет "\xb0\x04" вот так, это число 1200. И это не похоже на те зашифрованные строки как в онлайн шифровщиках.

Я и подумал что что-то делаю не так. Подскажите как трансформировать числа чтобы было что-то похожее на зашифрованный текст.

Вот пример зашифрованного слова "привет" -- [1108, 4512, 1, 2554, 2207, 3125]


Ответы (3 шт):

Автор решения: vp_arth
import base64

inputData = [1, 1108, 4512, 1, 2554, 2207, 3125, 7];
wordList = [num.to_bytes(2, byteorder='big') for num in inputData]

encoded = b''.join(wordList); # b'\x00\x01\x04T\x11\xa0\x00\x01\t\xfa\x08\x9f\x0c5\x00\x07'
b64encoded = base64.b64encode(encoded).decode('ascii')
print(base64.b64encode(encoded).decode('ascii'))


byte_str = base64.b64decode(b64encoded)
restored = [int.from_bytes(byte_str[i:i+2], byteorder='big') for i in range(0, len(byte_str), 2)]
print(restored)
AAEEVBGgAAEJ+gifDDUABw==
[1, 1108, 4512, 1, 2554, 2207, 3125, 7]
→ Ссылка
Автор решения: CrazyElf

Я тоже немного заморочился, вот вам:

encrypted = [1108, 4512, 1, 2554, 2207, 3125]
enc_text = ''.join(chr(ord('а') + int(n, 16) + 16 * (i % 2)) for i,n in enumerate(''.join(f'{x:04x}' for x in encrypted)))
print('Шифровка:', enc_text)
tmp = ''.join(f'{(ord(x) - ord("а") - 16 * (i % 2)):01x}' for i,x in enumerate(enc_text))
dec_numbers = [int(tmp[i:i+4], 16) for i in range(0, len(tmp), 4)]
print('Дешифрованные исходные числа:', dec_numbers)

На выходе:

Шифровка: афефбскрарасащпъашйяаьгх
Дешифрованные исходные числа: [1108, 4512, 1, 2554, 2207, 3125]

Берётся 16-ричное представление чисел и каждый 16-ричный символ превращается в русскую букву. Чётные буквы берутся из первой половины алфавита, нечётные из второй.

→ Ссылка
Автор решения: Михаил Муругов

Ладно. Раз уж тут такой "показ мод", то покажу ещё такой вариант:

import pickle
from base64 import b64encode, b64decode

encrypted = [1108, 4512, 1, 2554, 2207, 3125]
print(f'Исходное: {encrypted }')

encrypted_bytes = pickle.dumps(encrypted)
print(f'Байтовый дамп исходного: {encrypted_bytes}')

encrypted_string = b64encode(encrypted_bytes).decode()
print(f'Текстовое представление байтов: {encrypted_string}')

# --------

u_encrypted_bytes = b64decode(encrypted_string)
print(f'Байты из текстового представления: {u_encrypted_bytes}')

u_encrypted = pickle.loads(u_encrypted_bytes)
print(f'Исходное из байтов: {u_encrypted }')
→ Ссылка