kryptographi und programmieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
vinny
User
Beiträge: 6
Registriert: Freitag 2. Februar 2018, 01:23

Freitag 2. Februar 2018, 01:43

Hallo Leute,

ich studiere Kryptographi und probiere die ganze Zeit mich in python 3.6.3 aus.
Ich habe eine Rechnung aufgebaut die einfach nicht funktionieren will. Da ich nicht so viel Erfahrung im programmieren habe wollte ich mal die Programmierer fragen ob sie das Programm so schreiben würden oder etwas verändern würden. Das Programm macht mir alles bis zur line 16... Dann hängt er sich auf und ich muss mit Strg + c abbrechen. Wo liegt der Fehler, kann jemand mir helfen?
Wäre würden jeden Vorschlag dankbar..... Gruß vinny

>>> def pow_mod(x, y, z):
... "Calculate (x ** y) % z efficiently."
... number = 1
... while y:
... if y & 1:
... number = number * x % z
... y >>= 1
... x = x * x % z
... if y % 2 != y_parity:
... y = -y % p
... return number
...
>>> p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
>>> compressed_key = '0207843cb94c2398d41b34870d23d09143fab3d9014fc62eedd766fc54d8281b19'
>>> y_parity = int(compressed_key[:2]) - 2
>>> x = int(compressed_key[2:], 16)
>>> a = (pow_mod(x, 3, p) + 7) % p
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in pow_mod
KeyboardInterrupt
>>> y = (pow_mod(a, (p+1)//4, p)
... uncompressed_key = '04{:x}{:x}'.format(x, y)
File "<stdin>", line 2
uncompressed_key = '04{:x}{:x}'.format(x, y)
^
SyntaxError: invalid syntax
>>> print(uncompressed key)
File "<stdin>", line 1
print(uncompressed key)
^
SyntaxError: invalid syntax
Benutzeravatar
noisefloor
User
Beiträge: 2364
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Freitag 2. Februar 2018, 07:27

Hallo,

du musst alle Klammer, die du öffnest, wieder schließen. Also zähl' mal die öffnenden und schließenden Klammern...

Gruß, noisefloor
Benutzeravatar
pixewakb
User
Beiträge: 953
Registriert: Sonntag 24. April 2011, 19:43

Freitag 2. Februar 2018, 07:49

Und verwende die Codebox, d. h. beim Pull-down-Menü "Select code" "PY (Python)" auswählen und dann den Quelltext dorthinein einfügen. Das erleichtert es den anderen ungemein...
Sirius3
User
Beiträge: 7610
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 2. Februar 2018, 08:23

@vinny: Eingerückt wird immer mit 4 Leerzeichen, nicht mal 5, mal 4, mal 3. Warum hast Du einen Schlüssel, wo die ersten beiden Stellen dezimal, der Rest hexadezimal ist? Klammern und Unterstriche sind wichtig. In der Funktion pow_mod erscheint auf magische Weise die Variable y_parity, das darf nicht sein. Alles was eine Funktion braucht, muß über ihre Argumente kommen. Einrückungen sind wichtig. Schau Dir mal an, wie sich y in der while-Schleife ändert, wenn y & 1 == 0?

Hier der Code nochmal mit den aktuellen Einrückungen:

Code: Alles auswählen

def pow_mod(x, y, z):
    "Calculate (x ** y) % z efficiently."
    number = 1
    while y:
        if y & 1:
            number = number * x % z
            y >>= 1
            x = x * x % z
            if y % 2 != y_parity:
                y = -y % p
    return number
vinny
User
Beiträge: 6
Registriert: Freitag 2. Februar 2018, 01:23

Freitag 2. Februar 2018, 22:17

hey Leute danke erstmal für die Beiträge. Cool das ihr so schnell geantwortet habt...... Hier nochmal den Code aber diesmal mit dem Tip wie ich den Code euch besser anzeigen lassen kann.

Code: Alles auswählen

>>> def pow_mod(x, y, z):
...      "Calculate (x ** y) % z efficiently."
...      number = 1
...      while y:
...          if y & 1:
...              number = number * x % z
...              y >>= 1
...              x = x * x % z
...              if y % 2 != y_parity:
...                 y = -y % p
...      return number
...
>>> p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
>>> compressed_key = '0207843cb94c2398d41b34870d23d09143fab3d9014fc62eedd766fc54d8281b19'
>>> y_parity = int(compressed_key[:2]) - 2
>>> x = int(compressed_key[2:], 16)
>>> y = (pow_mod(a, (p+1)//4, p)
... a = (pow_mod(x, 3, p) + 7) % p
  File "<stdin>", line 2
    a = (pow_mod(x, 3, p) + 7) % p
    ^
SyntaxError: invalid syntax
>>> uncompressed_key = '04{:x}{:x}'.format(x, y)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>> print(uncompressed key)
  File "<stdin>", line 1
    print(uncompressed key)
                         ^
SyntaxError: invalid syntax
Benutzeravatar
pillmuncher
User
Beiträge: 1093
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Freitag 2. Februar 2018, 22:55

@vinny: Zähl mal die Klammern in Zeile 17. Es sollten gleich viele öffnende wie schließende sein.
In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 7610
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 3. Februar 2018, 17:25

@vinny: Du solltest schon versuchen, meine Anmerkungen zu berücksichtigen und meine Fragen zu beantworten, sonst kommen wir hier nicht weiter:

Eingerückt wird immer mit 4 Leerzeichen, nicht mal 5, mal 4, mal 3. Warum hast Du einen Schlüssel, wo die ersten beiden Stellen dezimal, der Rest hexadezimal ist? Klammern und Unterstriche sind wichtig. In der Funktion pow_mod erscheint auf magische Weise die Variable y_parity, das darf nicht sein. Alles was eine Funktion braucht, muß über ihre Argumente kommen. Einrückungen sind wichtig. Schau Dir mal an, wie sich y in der while-Schleife ändert, wenn y & 1 == 0?
Antworten