![]() |
Delphi-Version: 5
Hash-Wert bestehend aus 16 Zeichen?
Hallo!
Ich lese die Festplatten-Seriennummern aus, die bei jedem Hersteller einen bestimmten Format haben. Ich würde gerne aus der Seriennummer einen Hash-Wert erstellen, der exact aus 16 Zeichen besteht und dabei eindeutig bleibt. Ich meine, ich könnte z.B. aus einem MD5 Hash leicht 16 Zeichen extrahieren bzw. den Rest eifach abschneiden, aber dann etspricht es nicht mehr genau dem Input und somit nicht mehr eindeutig, auch wenn die Wahrscheinlichkeit einer Kollision sehr gering ist. Gibt es ein 16 Zeichen hash? Was würdet ihr mir empfehlen? Danke! |
AW: Hash-Wert bestehend aus 16 Zeichen?
Ein Hash ist eine Zuordnung einer größeren Eingangsmenge zu einer kleineren Ausgangsmenge. Ein guter Hash-Algorithmus vermeidet bei einer gegebenen Eingangsmenge mögliche Kollisionen - verhindern kann er sie nicht, wenn die Eingangsmenge nicht vollständig bekannt ist. Wenn die Eingangsmenge aber vollständig bekannt ist, tut es auch eine Nachschlage-Tabelle.
|
AW: Hash-Wert bestehend aus 16 Zeichen?
Vielen Dank für die schnelle Reaktion!
Zitat:
|
AW: Hash-Wert bestehend aus 16 Zeichen?
Die Eingangsmenge ist nicht die Seriennummer, sondern die Menge aller möglichen Seriennummern. Wenn diese bekannt ist, macht man einfach eine Liste und der Hashwert ist dann einfach der Index in der Liste. Die Ausgangsmenge ist die Menge aller erzeugten Hashwerte.
Wenn du aber nicht weist, welche Seriennummern alles kommen können, und die Länge der Seriennummern und der verfügbare Zeichensatz (z.B. nur Ziffern) nicht ausreichend eingeschränkt ist, dann wird es schwierig, einen dediziert eindeutigen Hash-Algorithmus zu finden, der in einen hinreichend kleinen Zielwert passt. Ich gebe mal ein Beispiel: Nimm das Telefonbuch von München und ordne jedem Eintrag einen Wert zwischen 0 und 255 zu. Das kann man natürlich nicht eindeutig machen, weil die Eingangsmenge (Telefonbucheinträge) deutlich größer als die Ausgangsmenge (0..255) ist. Nun ist mit 16 Zeichen (welche Zeichen sind da überhaupt erlaubt?) natürlich schon einiges unterzubringen. Insofern bleibt wohl lediglich das Problem der Eindeutigkeit. Ohne Kenntnis des Aufbaus der Seriennummern wird man dazu aber wenig sagen können. Vielleicht sagst du besser mal, was du mit diesem Hashwert bezweckst. Vielleicht ist ein Hash ja gar nicht der passende Ansatz. |
AW: Hash-Wert bestehend aus 16 Zeichen?
Evtl. meinst du ja auch 16 Bytes und genau so groß/lang ist ein MD5 (128bit)
![]() In Hex-Schreibweise ist der natürlich 32 Zeichen lang ;) |
AW: Hash-Wert bestehend aus 16 Zeichen?
Zitat:
Zitat:
Die Komponente liefert einen String aus insgesamt 19 Zeichen geterennt durch "-" (z.B. A4A7-541B-A4DA-4E81). Beim Aufruf der Komponente kann man bestimmen, welche Informationen bei der Generierung der ID einbezogen werden sollen (CPU, BIOS, HDD). Da ich verhindern wollte, dass sich die ComputerID beim Austausch der Festplatte ändert, habe ich immer nur die CPU- und BIOS-Infos gewählt. Beim Start ermittelt mein Programm (Client) das ComputerIDund übermittelt diese beim Login dem Server. Der Server prüft zuerst den Format der ComputerID und führt dann weitere Prüfungen durch. Irgendwann meldete der Server, dass zwei User, die etwa 2.000 Km von einander enfernt sitzen, die gleiche ComputerID haben. Daraufhin habe ich den Entwickler der Komponente angesprochen und es kam heraus, dass es doch nicht immer möglich ist, die CPU- und BIOS-Seriennummern auszulesen, deswegen ließt die Komponente andere Informationen aus, die verfügbar sind. Diese sind aber nicht eindeutig. Ich sollte mir aber trotzdem keine Sorgen machen, denn die Seriennummer der Festplatte reicht für die ComputerID vollkommen aus, meinte der Entwickler. Alle Hesteller vergeben den Laufwerken eindeutige Seriennummern. Das Format ist zwar bei jedem Hersteller anders, aber dafur ist eine Hash-Funktion da. Ich verlangte mein Geld zurück und bekam es auch. Die SN der Festplatte kann ich ja selber auslesen. Nun stehe ich vor dem Problem, dass ich auch noch die Server-Software ändern muss, wenn ich die HDD-Seriennummer nicht auf 16 Zeichen bringe. Dabei muss es auch noch eindeutig bleiben. |
AW: Hash-Wert bestehend aus 16 Zeichen?
In git kann man auch verkürzte SHA-1-Hashes verwenden; das sollte für dich auch genügen:
Zitat:
![]() Damit hast du bei 16 Zeichen >120 Bit statt 64 Bit (hexadezimal). Das sollte ausreichen. |
AW: Hash-Wert bestehend aus 16 Zeichen?
Hast Du schon einmal an die MAC-Dresse gedacht, soweit ich weiß, ist die eindeutig.
Gruß K-H |
AW: Hash-Wert bestehend aus 16 Zeichen?
Zitat:
|
AW: Hash-Wert bestehend aus 16 Zeichen?
Zitat:
Man kann dan zwar die MAC-Adresse ändern, aber das Flag für ![]() Es ist also nicht möglich die MAC-Adresse auf die eingebrannte MAC-Adresse einer anderen Netzwerkkarte zu ändern. :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz