Logo des Instituts  
 aufwärts

Kryptografie Aufgaben

Kryptografie   10.11.2016

Aufgabe 6:  

  1. Schreiben Sie eine Klasse ModInt zur Darstellung einer Zahl i im Körper Zahlenkörpern der ganzen Zahlen modulo n mit n Primzahl. Als Klassendefinition und Konstruktor schreiben Sie:
    # repraesentiert ein Element von Fn (dem Koerper der Zahlen modulo n)
    # und stellt die Grundrechenoperationen zur Verfuegung
    class ModInt(object):
    
        def __init__(self, i):
            self.i=i % ModInt.n
    
        # ... weitere, unten angegebene´ Methoden
    
    

    Die Zahl n soll in der Klasse ModInt als statisches Attribut (Klassen­variable) ModInt.n geführt werden.

     

    Implementieren Sie die Methoden

    __add__(self, other)    # addiert ModInt-Zahlen self und other
    __neg__(self)           # liefert additiv inverses Element von self
    __sub__(self, other)    # subtrahiert ModInt-Zahlen self und other
    __mul__(self, other)    # multipliziert ModInt-Zahlen self und other
    rec(self)               # liefert multiplikativ inverses (reziprokes) Element
    __div__(self, other)    # dividiert ModInt-Zahlen self und other
    __pow__(self, k)        # potenziert die ModInt-Zahl self mit der Integer-Zahl k
    __eq__(self, other)     # liefert true, wenn ModInt-Zahlen self und other gleich sind
    isZero(self)            # liefert true, wenn ModInt-Zahl self gleich Null ist
    __str__(self)           # wandelt ModInt-Zahl self in einen String um (fuer print)
    

    zur Darstellung der Rechen­operationen in dem Körper. Die durch doppelte Unterstriche gekenn­zeichneten Methoden überladen die zugeordneten Rechen­zeichen +, * usw.

    Implementieren Sie die Funktion __pow__ als schnelle modulare Exponentiation.

     

  2. Testen Sie die Klasse ModInt mit folgendem Programm:

     

    # Test, wird nur ausgefuehrt, wenn aktuelles Modul das Hauptprogramm ist
    # Zahlen und Berechnungen modulo n=7
    if __name__=="__main__":
        ModInt.n=7    # n ist statisches Attribut (Klassenvariable)
        s=ModInt(2)
        t=ModInt(13)
        print s
        print t
        print s+t
        print s*t
        print s-t
        print s/t
        print s**999
        print s*t==s/t
        print (s*t-s/t).isZero()
    

 

 

 

 

up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©  
Valid HTML 4.01 Transitional