Verschlüsselung / Hashcode?
-
Hallo,
ich habe ein Programm geschrieben das Benutzer mit Passwörter in einer Datei speichert:
z.B.:
benutzer";"passwort";"amazon.deda ich natürlich nicht will das jeder beim Öffnen der Datei die Passwörter erkennen kann, sondern eben nur das Programm selbst, habe ich mir gedacht die strings in Hashcode umzuwandeln und dann zu speichern:
long hashcode(string str) //dezimal vierstellige Hashzahl { long hash = 1; for (int i=0; i<(int)str.size(); i++) hash = (hash*19 + str[i]) % 9973; return hash; }Wie würdet ihr das machen?
Hat jemand vielleicht eine besser Idee?Gruß
Gustl
-
Warum sich was neues ausdenken (http://de.wikipedia.org/wiki/Shadow-Passwort)? Du solltest ein entsprechendes Tool oder Bibliothek fuer die Erzeugung von kryptografisch sicheren Hashes benutzen. Siehe man crypt (unter Linux).
-
Außerdem das Salz nicht vergessen.
Aber sehr lobenswert, dass du das überhaupt versuchst. Es gibt erschreckend viele professionelle Entwickler die solch grundlegende Sicherheitsmechanismen ignorieren.
-
Ja, aber das ganze md5 geht ja irgnedwie nur in eine Richtung... mein Programm liest die verschlüsselten Codes ein und muss sie wieder lesbar umwandeln...
deswegen wollte ich eine "eigene" verschlüsselung anwenden... aber sicher ist die wohl nicht?
-
Eine Richtung reicht ja auch aus. Beim Verifizieren wird einfach der Hashwert des Passworts gebildet und mit dem gespeicherten Hashwert verglichen.
-
CRC32 oder für den Faulpelz boost::hash.
-
David_pb schrieb:
Eine Richtung reicht ja auch aus. Beim Verifizieren wird einfach der Hashwert des Passworts gebildet und mit dem gespeicherten Hashwert verglichen.
Ja, für das MainPasswort vom Programm, aber die anderen Benutzer mit ihren Passwörter sollen ja angezeigt werden...
Edit:Habe mir auch schon ausgedacht einfach die einzelnen chars mit +10 oder so hochzählen und beim zurückentschlüsseln wieder -10... aber dann könnte es ja sein das ich in meiner Datei dann durch Zufall ";" bekomme....
-
Also der SuperUser soll das Klartextpasswort der weniger privilegierten Benutzer sehen duerfen? Warum?
-
Es ist ein Passwort "Safe", der beim Start das Mainpasswort von dem User abfrägt und dann kann man die ganzen Passwörter die man gespeichert hat abrufen und bei bedarf in die Zwischenablage kopieren... das habe ich schon fertig, jetzt will ich die string noch richtig verschlüsseln damit man sie in der Datei nicht einsehen kann.
Im Programm werden dann zb. EMails Passwörter, Internetportale, Webserver etc. eingetragen.
-
Gustl schrieb:
Edit:Habe mir auch schon ausgedacht einfach die einzelnen chars mit +10 oder so hochzählen und beim zurückentschlüsseln wieder -10... aber dann könnte es ja sein das ich in meiner Datei dann durch Zufall ";" bekomme....
Man könnte einfach eine Zeichen-Ersetzungstabelle verwenden. Damit wäre das ausgschlossen.
Aber mal ehrlich: Damit verschleierst du das Passwort nur. Ein Hashverfahren ist deutlich sicherer, man braucht den Klartext nicht mehr (normalerweise).
-
Das ist vom Prinzip her schon nicht sicher zu realisieren.
Wenn dein Programm die "Verschlüsselung" rückgängig machen kann, dann kann das jeder andere auch wenn er den Algorithmus kennt. Und auch wenn er den Quellcode des Programms nicht hat, so hat er zumindest das Binary.
Nimm einfach einen Pseudozufallszahlengenerator, das ist einfach. Als Seed kannst du z.B. eine Kombination aus Passwortlänge und Zusatzbyte(s) nehmen, die du dann mit in die Datei schreibst.
-
Gustl schrieb:
Es ist ein Passwort "Safe", der beim Start das Mainpasswort von dem User abfrägt und dann kann man die ganzen Passwörter die man gespeichert hat abrufen und bei bedarf in die Zwischenablage kopieren... das habe ich schon fertig, jetzt will ich die string noch richtig verschlüsseln damit man sie in der Datei nicht einsehen kann.
Im Programm werden dann zb. EMails Passwörter, Internetportale, Webserver etc. eingetragen.
Achso. Dann solltest du ein gebräuchliches Verschlüsselungsverfahren für die gesamte Datei benutzen, z.B. Twofish.
So wird da natürlich schon eher ein Schuh draus.
-
Danke, dann verschlüssel ich die gesamte Datei und entschlüssel sie wieder.