По сути, для этого есть два шага:
- кодировать текст в байты - обычно для этого требуется кодировка символов, такая как UTF-8 или латинская кодировка;
- кодировать байты в целое число - это часть операция шифрования в RSA, как указано в PKCS#1, и выполняется с использованием функции OS2IP.
В вашем случае текст, очевидно, уже закодирован как байты; файлы в конце концов состоят из байтов, и вы открываете файл как двоичный файл (b в флаге rb).
OS2IP означает строку октетов для целочисленного примитива. Строка октетов — это не что иное, как массив байтов. Если байты уже в правильной форме, то это просто вопрос интерпретация байты как число, так как компьютер все равно всегда обрабатывает все как двоичное.
Однако в RSA на основе PKCS#1 OS2IP напрямую не используется: сначала применяется заполнение, связанное с безопасностью. Это может быть либо заполнение, определенное PKCS#1 v1.5, либо заполнение OAEP. Добавление заполнения означает, что перед применением сообщения добавляется незначительная часть служебной информации; объем открытого текста намного меньше, чем модуль RSA.
Это одна из причин, по которой файлы обычно не шифруются напрямую с помощью RSA. Другая основная причина заключается в том, что шифрование RSA и особенно операции дешифрования очень неэффективны по сравнению, например, с Шифрование на основе AES. Вместо этого мы используем такой протокол, как PGP, который выполняет гибридное шифрование. RSA в безопасном режиме работы имеет определенные накладные расходы и максимум на операцию, поэтому обычно вместо этого симметричный ключ шифруется или выводится с использованием RSA; этот симметричный ключ затем используется для шифрования данных. Симметричные шифры, такие как AES, напрямую работают с двоичными данными, поэтому помимо обработки вектора инициализации и заполнения данные могут быть зашифрованы напрямую без преобразования.