If Abfrage id code verwenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sparrow512
User
Beiträge: 4
Registriert: Samstag 20. August 2016, 10:20

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.
I'm Sparrow512 and i approve this message.
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Suchst du `hash(name)`? Selbst wenn `id` immer den selben Wert zurückgeben werde, verlgeichst du immernoch eine Zahl mit einem String.
the more they change the more they stay the same
nezzcarth
User
Beiträge: 1792
Registriert: Samstag 16. April 2011, 12:47

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.
Sparrow512
User
Beiträge: 4
Registriert: Samstag 20. August 2016, 10:20

Schade ich hätte gedacht das sie Permanent bleibt gibt es denn eine Alternative?
I'm Sparrow512 and i approve this message.
Sparrow512
User
Beiträge: 4
Registriert: Samstag 20. August 2016, 10:20

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".
I'm Sparrow512 and i approve this message.
Sparrow512
User
Beiträge: 4
Registriert: Samstag 20. August 2016, 10:20

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.
I'm Sparrow512 and i approve this message.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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).
the more they change the more they stay the same
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@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")    
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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.
the more they change the more they stay the same
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dav1d: die Information ist reichlich veraltet: What’s New In Python 3.3
Hash randomization is switched on by default.
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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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.
the more they change the more they stay the same
Antworten