Seite 1 von 1

If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 10:42
von Sparrow512
Hallo Leute,
ich bin relativ neu in den Thema Python und wollte mal etwas ausprobieren. Hier ist erstmal der Code:

Code: Alles auswählen

name = input("Bitte Namen eingeben: ")
if(id(name) == "139849572197968"):
    print("GENAU")

else:
    print("NO")    
Und zwar wollte ich das man beim input seinen Namen eingibt und dieser, dann (falls er Bob wäre) in diesen Zahlencode umgewandelt wird so das, dann das Wort GENAU erscheint. Nur wenn ich dies mache kommt immer NO raus. Wie gesagt ich bin neu und würde undeutlichkeiten ggfls. Korriegieren oder beantworten.
Danke im voraus.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 11:16
von eckhard
Hallo Sparrow512,
mir ist eigentlich nicht klar, was Du machen willst. Aber was es auch ist, die Funktion id ist sicher nicht dafür geeignet.
Der Aufruf help(id) liefert:
[codebox=text file=Unbenannt.txt]
Help on built-in function id in module builtins:

id(...)
id(object) -> integer

Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
[/code]
d.h. id(name) hat nichts zu tun mit dem Wert von name. Drucke doch id(name) mal aus.
Eckhard

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 13:23
von Dav1d
Suchst du `hash(name)`? Selbst wenn `id` immer den selben Wert zurückgeben werde, verlgeichst du immernoch eine Zahl mit einem String.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 13:23
von nezzcarth
Ergänzend zu dem, was eckhart meinte:
Ich vermute mal '139849572197968' ist das Ergebnis, das du erhalten hast, als du id('Bob') eingegeben hast, oder?
Allerdings handelt es sich dabei um keine ID, die zuzusagen fest zu dieser Zeichenfolge gehört, sondern um eine interne Objekt ID, die Python vergibt und die bei jedem Interpreteraufruf anders ist. Wenn du Buchstaben in einen gleichbleibenden Zahlencode umwandeln möchtest, kannst du dazu beispielsweise 'ord' verwenden; mit Verschlüsselung o.Ä. hat das aber natürlich nichts zu tun.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 18:31
von Sparrow512
Schade ich hätte gedacht das sie Permanent bleibt gibt es denn eine Alternative?

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 18:33
von Sparrow512
Dav1d hat geschrieben:Suchst du `hash(name)`? Selbst wenn `id` immer den selben Wert zurückgeben werde, verlgeichst du immernoch eine Zahl mit einem String.
Leider nicht ich wollte etwas wie eine "geheime Zahlenreihe".

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 18:35
von Sparrow512
eckhard hat geschrieben:Hallo Sparrow512,
mir ist eigentlich nicht klar, was Du machen willst. Aber was es auch ist, die Funktion id ist sicher nicht dafür geeignet.
Der Aufruf help(id) liefert:
[codebox=text file=Unbenannt.txt]
Help on built-in function id in module builtins:

id(...)
id(object) -> integer

Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
[/code]
d.h. id(name) hat nichts zu tun mit dem Wert von name. Drucke doch id(name) mal aus.
Eckhard
Danke dafür.
Ich wollte etwas wie einen Code den man nicht so leicht bemerkt welcher Name dahinter steckt.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 18:47
von Dav1d
Sparrow512 hat geschrieben:
Dav1d hat geschrieben:Suchst du `hash(name)`? Selbst wenn `id` immer den selben Wert zurückgeben werde, verlgeichst du immernoch eine Zahl mit einem String.
Leider nicht ich wollte etwas wie eine "geheime Zahlenreihe".
Genauer und einfacher kommst du nicht an eine 'geheime' Zahlenreihe, hash ist nicht umkehrbar (so wie jeder andere anständige Hash).

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 19:08
von Sirius3
@Dav1d: die `hash`-Funktion ist genauso ungegeeignet wie `id`, da sich der Hash bei jedem Programmaufruf ändert. Außerdem haben die Zahlen wenig mit ›geheim‹ zu tun.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 19:25
von Sirius3
@Sparrow512: das Modul `hashlib` bietet sichere Berechnungen von Hash-Werten, so dass Dein Name garantiert nicht herausgefunden werden kann:

Code: Alles auswählen

from hashlib import pbkdf2_hmac

HASH_BOB = b'\x08\x07\xd3L\xea\xae\xf6\xb9\x1d+\x91\xe7\x8cN\xde\x93\xcb\xb7\x97C\xf9w\xe4\xd8\x0c0\x15\x01\x98\xd5\x91M'

name = input("Bitte Namen eingeben: ")
hashed_name = pbkdf2_hmac('sha256', name.encode('utf8'), b'salt', 100000)
if hashed_name == HASH_BOB:
    print("GENAU")
else:
    print("NO")    

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 19:39
von Dav1d
Sirius3 hat geschrieben:@Dav1d: die `hash`-Funktion ist genauso ungegeeignet wie `id`, da sich der Hash bei jedem Programmaufruf ändert.
Nein.
-R : use a pseudo-random salt to make hash() values of various types be
unpredictable between separate invocations of the interpreter, as
a defense against denial-of-service attacks

PYTHONHASHSEED: if this variable is set to 'random', the effect is the same
as specifying the -R option: a random value is used to seed the hashes of
str, bytes and datetime objects. It can also be set to an integer
in the range [0,4294967295] to get hash values with a predictable seed.
Gibt da auch 1-2 Diskussionen auf dem Bugtracker und der Mailinglist dazu. Natürlich ist das keine Lösung die man irgendwo in einem produktionsfertigen Code verwenden sollte, aber es geht hier eindeutig um ein Anfängerprogramm das dazu benutzt wird die Sprache zu lernen und nicht gleich mit Security, Hashes und asymmetrischen Verschlüsselungen erschlagen zu werden.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 19:49
von Sirius3
@Dav1d: die Information ist reichlich veraltet: What’s New In Python 3.3
Hash randomization is switched on by default.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 19:54
von BlackJack
@Dav1d: Doch!!1!elf! Das was Du da zitierst sind letztendlich Implementierungsdetails und es gibt Implementierungen bei denen das per Voreinstellung eingeschaltet ist. Gerade bei eindeutigen Anfängerprogrammen sollte man deutlich machen das Kryptokram nichts für Anfängerprogramme ist. Und es auch nicht dazu wird in dem man irgendwelche ”ein bisschen geheim”-Pseudosicherheit bastelt. Denn genau das führt zu dem üblichen, „hey aber das funktioniert doch!“ von Leuten die's nicht verstanden haben und landet am Ende doch immer wieder in Produktionscode, weil man das ja mal so gelernt hat. Bei solchen unsinnigen Versuchen sollte gleich der passende Einspruch kommen. Sicherheit macht man entweder richtig, oder man lässt es bleiben. Falsche Sicherheit schadet mehr als gar keine.

Re: If Abfrage id code verwenden

Verfasst: Samstag 20. August 2016, 20:12
von Dav1d
Sirius3 hat geschrieben:@Dav1d: die Information ist reichlich veraltet: What’s New In Python 3.3
Hash randomization is switched on by default.
TIL, danke.