2016-10-10 1 views
0

J'ai un travail à faire à l'université dans je dois coder le RSA suivant la spécification RSA-OAEP. Mon professeur me donne un pdf avec la spécification RFC 3447.Mise en œuvre de i2osp et os2ip

Dans le pdf je suit:

I2OSP convertit un entier non négatif à une chaîne d'octets d'une longueur spécifiée .

I2OSP (x, xLen)

entrée: x entier positif à convertir xLen destinée longueur de la chaîne d'octets résultant

sortie: X chaîne d'octets correspondant de longueur xLen

Erreur: "nombre entier trop grand"

Étapes:

  1. Si x> = 256^xLen, affiche "entier trop grand" et arrête.

  2. Ecrire le nombre entier x dans son unique de représentation xLen chiffres dans de base 256:

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

    où 0 < = x_i < 256 (notez que un ou plusieurs chiffres avancés seront zéro si x est moins de 256^(xLen-1)).

  3. Soit l'octet X_i ont la valeur entière x_ (xLen-i) pour i = 1 < < = xLen. Sortie de la chaîne d'octets

    X = X_1 X_2 ... X_xLen. 
    

4,2 OS2IP

de OS2IP convertit une chaîne d'octets à un entier non négatif.

OS2IP (X)

entrée: chaîne d'octets X à convertir

sortie: x correspondant entier positif

étapes:

  1. Soit X_1 X_2 .. X_xLen sont les octets de X du premier au dernier, et soit x_ (xLen-i) la valeur entière de l'octet X_i pour = i < = xLen.

  2. Soit x = x_ (xLen-1) 256^(xLen-1) + x_ (xLen-2) 256^(xLen-2) + ...

    • x 1 256 + x_0.
  3. Sortie x.

Mais je ne peux pas comprendre ce pseudo-code, quelqu'un peut-il me donner une explication de comment je fais cela? La réponse peut être soit en pseudo-code, soit en implémentation python.

+1

Vous auriez besoin d'être plus précis sur la partie qui vous perturbe. Cependant, nous ne ferons pas vos devoirs pour vous. –

+0

cela ne fait pas mes devoirs. Comme je l'ai déjà dit, si vous lisez attentivement, mon devoir est de mettre en œuvre un code psa de psa avec le système de chiffrement asymétrique optimal (RSA-OAEP). Vous pouvez vérifier le document pour plus de détails dans ietf.org/rfc/rfc3447.txt Je ne comprends tout simplement pas comment cette primitive de conversion de données fonctionne en lisant le document. Comme je l'ai dit, si vous mettez du pseudo-code, ou si vous m'expliquez, je vous en serais reconnaissant, car je ne comprends pas comment lire un document pour convertir un entier en chaîne d'octets, je ne veux pas vous ou quelqu'un d'autre fais mes devoirs .. –

+0

Au fait ... j'ai résolu le problème par moi-même. Merci à votre commentaire utile, plein de connaissances, vous êtes très gentil. Peut-être un jour j'essaie de vous acheter pour faire les devoirs pour moi ... –

Répondre

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