Как зашифровать строку по схеме RSA? - PullRequest
0 голосов
/ 05 мая 2018

Я использую учебник для реализации RSA с этого сайта: https://sahandsaba.com/cryptography-rsa-part-1.html

Они используют эту функцию для шифрования:

def power(x, m, n):
    """Calculate x^m modulo n using O(log(m)) operations."""
    a = 1
    while m > 0:
        if m % 2 == 1:
            a = (a * x) % n
        x = (x * x) % n
        m //= 2
    return a

def rsa_encrypt(message, n, e):
    return modular.power(message, e, n)

и затем он шифрует число:

>>> message = 123
>>> cipher = rsa_encrypt(message, n, e)

Как мне зашифровать всю строку? Я хочу зашифровать строку, сгенерированную хэшем, используя эту реализацию.

1 Ответ

0 голосов
/ 05 мая 2018

Две функции, которые вам не хватает, предназначены для перехода от последовательности байтов к числу и обратно:

def bytes2num(b):
    return b[0] + 256 * bytes2num(b[1:]) if b else 0

def num2bytes(n):
    return bytes([n % 256]) + num2bytes(n // 256) if n else b''

Если вы хотите работать со строками, вы можете определить функции:

def str2num(s):
    return bytes2num(s.encode('utf-8'))

def num2str(n):
    return num2bytes(n).decode('utf-8')

Вы должны сделать эти реализации итеративными, если ваши сообщения очень длинные.

Тест:

>>> s = 'Hello, world!'

>>> str2num(s)
2645608968347327576478451524936

>>> num2str(2645608968347327576478451524936)
'Hello, world!'
...