AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hash-Wert bestehend aus 16 Zeichen?

Ein Thema von romber · begonnen am 13. Apr 2013 · letzter Beitrag vom 15. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 14:00
Delphi-Version: 5
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!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 14:30
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 15:14
Vielen Dank für die schnelle Reaktion!

Wenn die Eingangsmenge aber vollständig bekannt ist, tut es auch eine Nachschlage-Tabelle.
Was ist eine Nachschlage-Tabelle? Die Eingangsmenge ist bekannt, das wäre der HDD-Seriennummer. Aber das mit der Nachschlage-Tabelle habe ich, ehrlich gesagt, nicht kapiert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 15:48
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 16:11
Evtl. meinst du ja auch 16 Bytes und genau so groß/lang ist ein MD5 (128bit)
http://en.wikipedia.org/wiki/MD5

In Hex-Schreibweise ist der natürlich 32 Zeichen lang
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 17:01
Die Eingangsmenge ist nicht die Seriennummer, sondern die Menge aller möglichen Seriennummern...
Ok, jetzt verstehe ich.

Vielleicht sagst du besser mal, was du mit diesem Hashwert bezweckst. Vielleicht ist ein Hash ja gar nicht der passende Ansatz.
Nach dem alle meine Versuche, eine Funktion für die Ermittlung einer eindeutigen ComputerID zu erstellen, gescheitert sind, habe ich mich verzweifelt für eine teure kommerzielle Lösung entschieden. Der Entwickler garantierte für jedes System eine eindeutige ComputerID, generiert aus der Kombination von CPU-, BIOS- und HDD-Seriennummern. Kurz getestet habe ich die Komponente gekauft. Die Tatsachen, dass die CPU-Seriennummer bei über 90% aller CPUs standartmäßig "versteckt" ist und die BIOS-Seriennummer überhaupt kein pflichtiges Parameter ist, an den sich die Herstellen halten müssen, haben mich nicht vom Kauf abgehalten. Ich dachte mir, der Entwickler soll doch irgendwelche ausgeklügelte Methode gefunden haben, die Daten auszulesen. Auch der Preis ist nicht gerade billig. Kurz gesagt und war froh, endlich eine funktionierende Lösung gefunden zu haben.

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.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 17:36
In git kann man auch verkürzte SHA-1-Hashes verwenden; das sollte für dich auch genügen:
Zitat:
One of the largest Git projects, the Linux kernel, is beginning to need 12 characters out of the possible 40 to stay unique.
Dabei werden nur Hexadezimal-Ziffer genutzt ... da könntest du an der Effizienz noch einiges drehen: Ascii85.
Damit hast du bei 16 Zeichen >120 Bit statt 64 Bit (hexadezimal). Das sollte ausreichen.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (13. Apr 2013 um 23:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 22:01
Hast Du schon einmal an die MAC-Dresse gedacht, soweit ich weiß, ist die eindeutig.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 22:11
Hast Du schon einmal an die MAC-Dresse gedacht, soweit ich weiß, ist die eindeutig.
Die Mac-Adresse lässt sich sehr leicht manipulieren, soweit ich weis.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Hash-Wert bestehend aus 16 Zeichen?

  Alt 13. Apr 2013, 22:20
Die Mac-Adresse lässt sich sehr leicht manipulieren, soweit ich weis.
Aber nicht mehr unter Window 7 & 8. Bei Vista bin ich mir nicht sicher.
Man kann dan zwar die MAC-Adresse ändern, aber das Flag für Locally Administered Address wird von Windows erzwungen.
Es ist also nicht möglich die MAC-Adresse auf die eingebrannte MAC-Adresse einer anderen Netzwerkkarte zu ändern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz