2016-10-10 6 views
0

У меня есть работа в университете, я должен закодировать RSA по спецификации RSA-OAEP. Мой профессор дает мне один pdf-файл с спецификацией RFC 3447.Реализация i2osp и os2ip

В PDF У меня есть следующий:

I2OSP преобразует неотрицательное целое октетной строки определенной длиной .

I2OSP (х, xLen)

Входной сигнал: х неотрицательное целое число, чтобы быть преобразованы xLen предназначены длину результирующей октета строки

Выход: X соответствующая строка октетов длины xLen

Ошибка: «целое слишком большое»

Этапы:

  1. Если x> = 256^xLen, выведите «integer too large» и остановите.

  2. Написать целое число х в своей уникальной xLen-значного представления в базе 256:

    x = x_(xLen-1) 256^(xLen-1) + x_(xLen-2) 256^(xLen-2) + ... 
    + x_1 256 + x_0, 
    

    где 0 < = x_i < 256 (обратите внимание, что один или более первые цифры будут нуль, если х равен менее 256 мк (xLen-1)).

  3. Пусть октет X_i есть целое значение x_ (xLen-I) в течение 1 < = I < = xLen. Вывод строка октетов

    X = X_1 X_2 ... X_xLen. 
    

4,2 OS2IP

OS2IP преобразует октет строку в неотрицательное целое число.

OS2IP (Х)

Входной сигнал: Х строка октетов быть преобразованы

Выход: х соответствующее неотрицательное целое число

действия:

  1. Пусть X_1 X_2 .. X_xLen - это октеты X от первого до последнего, и x_ (xLen-i) - целочисленное значение октет X_i для = i < = xLen.

  2. Пусть х = Х- (xLen-1) 256^(xLen-1) + Х- (xLen-2) 256^(xLen-2) + ...

    • x_1 256 + x_0.
  3. Выход х.

Но я не могу понять этот псевдокод, может кто-нибудь дать мне одно объяснение, как я это делаю? Ответ может быть либо в псевдокоде, либо в реализации python.

+1

Вам нужно будет уточнить, какая часть вас путает. Однако мы не собираемся делать домашнее задание для вас. –

+0

Это не моя домашняя работа. Как я уже говорил, если вы внимательно прочитаете, моя домашняя работа - это код реализации python для rsa с оптимальной асимметричной схемой шифрования (RSA-OAEP). Вы можете проверить документ для получения более подробной информации в ietf.org/rfc/rfc3447.txt. Я просто не понимаю, как этот примитив преобразования данных работает с чтением документа. Как я уже сказал, если вы ставите псевдокод или объясните мне, я бы вас признал, потому что я не могу понять, как читать документ, как мне нужно сделать, чтобы преобразовать целое число в строку октета, я не хочу, чтобы вы или кто-то сделаю домашнее задание .. –

+0

Кстати ... Я сам разрешил проблему. Благодаря вашему внимательному комментарию, полному знаний, вы очень добры. Может быть, когда-нибудь я попытаюсь купить тебя, чтобы сделать домашнее задание для меня ... –

ответ

0
def i2osp(x, xLen): 
     if x >= 256^xLen: 
      raise ValueError("integer too large") 
     digits = [] 

     while x: 
      digits.append(int(x % 256)) 
      x //= 256 
     for i in range(xLen - len(digits)): 
      digits.append(0) 
     return digits[::-1] 

def os2ip(X): 
     xLen = len(X) 
     X = X[::-1] 
     x = 0 
     for i in range(xLen): 
      x += X[i] * 256^i 
     return x