Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

MD5-Algorithmus unter QuickBasic
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 27.02.2005, 16:46    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
Naja, ganz einfach...:

Code:

INPUT "PASSWORT"; pass$

FOR byte = 1 TO len(pass$)
 vsByte = (RND * 256 + ASC(MID$(pass$, byte, 1))) MOD 256
 totalByte = totalByte + vsByte
NEXT


und schon erhältst du eine wunderbare Zahl, die (außer durch Brute force cool ) nicht mehr zu knacken ist. Da das Passwort recht lang sein kann, solltest du totalByte als LONG dimensionieren, wenn nicht sogar als Currency (oder so ähnlich, die Suffix ist auf jeden fall ein @.)

Wichtig ist aber, dass du dann in deinem Programm eine RANDOMIZE-Zeile hast. Und nicht RANDOMIZE TIMER, weil ja dann jedes mal was anderes rauskommt. Da kannst du dich jetzt entscheiden, ob die einfach im Programm eingebaut werden soll
(RANDOMIZE 1), oder ob das vom User als zweite sicherheit eingegeben werden soll (INPUT rand: RANDOMIZE rand).

Damit solltest du dann endgültig auf der sicheren Seite sein *g*


schön und gut, aber "ab" und "ba" geben dasselbe Verschlüsselte zurück...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 27.02.2005, 17:07    Titel: Antworten mit Zitat

wenn du in deinem Prog nun randomize 1 stehen hast ist diese verschlüsselung recht einfach zu knacken:

(ver$=Verschlüsseltes Passwort)
Code:

FOR byte = 1 TO len(ver$)
 vsByte = (ASC(MID$(pass$, byte, 1))-RND * 256) MOD 256
 totalByte = totalByte + vsByte
NEXT


ich meinte:
du zerlegst den Passwort-String in einzelne Zeichen, dann adierst du die ASCI- Codes jedes Zeichen. Am Ende hast du eine Zahl (=endzahl)
dann die Folgende Zeile:

Code:
randomize endzahl


und dann weiter wie es Dusky_Joe beschrieben hat.
Dann kommen bei RND immer andere Zahlen heraus.
Das Problem bei Randomize 1 ist, es kommen bei RND immer die gleichen zahlen heraus. wenn du nun diese Zahlen zum ASCI-Code des Passwortzeichen adierst, kannst du alles rückgänig machen indem du die werte einfach wieder subtrahierst.

Zu deinem Problem mit "ab" und "ba": wenn man die ASCI- Werte addiert kommt zwar die gleiche zahl heraus, mit der man Randomize initallisiert, aber das verschlüsselte Passwort ist nachher ein anderes.
Der erste Wert den RND zurückgibt, wird einmal zu "b" und einmal zu "a" adiert, bem zweiten genauso. du siehst also die verschlüsselten Paswörter sind verschieden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 27.02.2005, 17:27    Titel: Antworten mit Zitat

So, jetzt bin ich so weit:

Code:
INPUT "PASSWORT"; pass$

FOR byte = 1 TO LEN(pass$)
r% = ASC(MID$(pass$, byte, 1)) + r%
NEXT

RANDOMIZE r%

FOR byte = 1 TO LEN(pass$)
 vsByte& = (RND * 256 + ASC(MID$(pass$, byte, 1))) MOD 256
 totalByte& = totalByte& + vsByte&
NEXT
PRINT totalByte&



Jedoch ergeben "abc" und "cba" oder "bca" usw. den selben Rückgabewert...
Wenn ich es als String speichere werden sie unterschiedlich lange und es sind halt einfach die Zahlen an einer anderen Zeile...

Gibt es nicht eine Möglichkeit den String auf eine bstimmte länge zu beschränken?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.02.2005, 17:30    Titel: Antworten mit Zitat

Hallo.

Füll doch einfach mir Nullen auf, um den String immer gleich lang zu haben. lächeln

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 27.02.2005, 17:32    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hallo.

Füll doch einfach mir Nullen auf, um den String immer gleich lang zu haben. lächeln

Viele Grüße!
Sebastian


aber wenn ich einen überlangen String erhalte?
Einfach ein paar Zeichen löschen durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.02.2005, 18:05    Titel: Antworten mit Zitat

kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem Zunge rausstrecken
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 27.02.2005, 18:12    Titel: Antworten mit Zitat

MisterD hat Folgendes geschrieben:
kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem Zunge rausstrecken


aber dann gibt es andere passwörter mit demselben wert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.02.2005, 18:55    Titel: Antworten mit Zitat

Hallo.

Das ist bei CRC und Konsorten aber überall so.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 27.02.2005, 21:41    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hallo.

Das ist bei CRC und Konsorten aber überall so.

Viele Grüße!
Sebastian


sicher nicht....

sonst bringt ja das nix...
so könnte jeder mit einem bestimmten, anderen passwort hier ins Forum rein...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.02.2005, 21:53    Titel: Antworten mit Zitat

Diese Prüfsummen sind auf beliebig lange Zeichenketten anwendbar, obwohl die Anzahl der Kombinationsmöglichkeiten begrenzt ist. Daraus resultiert, dass mehrere Zeichenketten die gleiche Prüfsumme haben müssen.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.02.2005, 22:05    Titel: Antworten mit Zitat

gandro hat Folgendes geschrieben:
MisterD hat Folgendes geschrieben:
kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem Zunge rausstrecken


aber dann gibt es andere passwörter mit demselben wert...


Die gibts eh.

"Hallo" und "Gbkmo" haben den selben wert wenn du die einzelnen Asciiwerte einfach nur addierst.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 28.02.2005, 14:26    Titel: Antworten mit Zitat

wie schon gesagt, "ab" und "ba" haben zwar den selben wert, mit dem du randomize initallisierst, aber das verschlüsselte passwort ist nachher nicht dasselbe.

Ein Beispiel:

"a" hat den ASCI-Wert 97,
"b" hat den Wert 98,
-> Die initallisierst randomize mit 195

Mit folgendem Code:

Code:
randomize 195
x=int(rnd*256)
y=int(rnd*256)


erhälst du für x=2 und für y=191

das verschlüsselte passwort ist bei:

"ab"=chr$(asc("a")+2)+chr$(asc("b")+191)
"ba"=chr$(asc("b")+2)+chr$(asc("a")+191)

Hier entsteht beides mal ein fehler weil die
asci-Werte bei chr$(asc("b/a")+191) mehr als 255 geben, aber das
kann behoben werden indem man vom davon
255 abzieht, es entsteht ein Wert wie wenn
man nach 255 wieder auf 0 springen würde.

Im endeffekt würde bei "ab" als verschlüsseltes Passwort "c$" rauskommen, bei "ba" würde "d!" herauskommen.

Ich hoffe es ist nun etwas klarer geworden, auch wenns etwas umständlich erklärt ist zwinkern.

(übrigens, es kann sein das zwei verschiedene Passwörter das gleiche verschlüsselte Passwort ergeben, aber in der Praxis sieht es so aus, das die Wahrscheinlichkeit ein solches identisches Passwort zu finden sehr gering ist.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 28.02.2005, 16:55    Titel: Antworten mit Zitat

Die Praxis heißt Brute force cool
Und das sollte ja das einzige Mittel sein, mit dem man das Passwort rausfinden können sollte, oder?


Wenn du willst, dass auch das nicht mehr möglich ist, musst du eben eine Wartezeit zwischen den Eingaben einbauen, oder so was wie beim Handy: Man kann 3 mal den PIN eingeben, dann kommt der PUK ran *g*
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 01.03.2005, 00:01    Titel: Antworten mit Zitat

Hallo!

Soweit ich weiss, liefert RND zwar immer die gleichen Zufallszahlen, wenn mit dem selben Wert per RANDOMIZE initialisiert, aber nur nach einem Neustart. Man müsste also nach einer falschen Eingabe das Programm komplett beenden. Das könnte etwas nervig für den Anwender sein.

Im Prinzip reicht es ja schon, die ASCII-Werte der Zeichen des Originalpasswortes der Reihe nach zu multiplizieren, zu quadrieren oder was auch immer. Überschreitet das Ergebnis dieser Rechnung einen bestimmten Wert, wird es hinten abgeschnitten. Dadurch wird ein Zurückrechnen unmöglich gemacht, weil sich ja nicht mehr rekonstruieren lässt, wie oft oder was abgeschnitten wurde. Jedenfalls denke ich das - ich bin allerdings kein grosser Mathematiker...

Die Länge des entstehenden Schlüssels kannst du festlegen, indem du den Maximalwert setzt, ab dem das Ergebnis abgeschnitten werden soll.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 01.03.2005, 16:21    Titel: Antworten mit Zitat

So einen RND-Reset bekommst du ganz einfach, indem du RND(-1) abfragst. Alles nachzulesen auf EPS's seite *g*

Das Problem bei einer Multiplikation ist - wie auch bei der einfachen Addition - dass man das selbe ergebnis für "ab" wie auch für "ba" erhält. Durch das Abschneiden kann das vllt unterbunden werden, aber dazu muss das passwort eine bestimmte länge haben, damit es überhaupt zugenschnitten werden kann *g*

So was aber dürfte schwer zurückzuverfolgen sein.

Code:

FOR i = 1 TO LEN(pass$)
 byte = ASC(MID$(pass$, i, 1))
 endprodukt = (endprodukt * byte) MOD 256
NEXT


Praktisch bei dieser Methode ist, dass nur 1 Byte geschrieben werden muss. Wenn man die volle 'Kapazität' eines INTEGERs ausnutzen will, muss eben MOD 65536 dastehen... ach ne, MOD 32767, QB-Integer sind ja signed *g*

Möglich wäre auch, die werte voneinander Abzuziehen. Denn
ASC("a") - ASC("b")
ist nicht das selbe wie
ASC("b") - ASC("a")
Das Ergebnis wäre dann eben negativ. Also am besten so was wie MOD -32768 anfügen, oder so *g*

Sinnvoll wäre auch eine Kombination, also erst Plus, dann Minus, dann Mal, dann getelt...
Die frage bei der Division ist dann eben, ob es eine Integerdiv sein soll, oder eine normale. Bei der IntDiv ist das Problem, dass man schnell mal zwei erlaubte passworte bekommt...
(16 / cool = (11\ 5) = (12 \ 5) = ....


Aber inzwischen sollte es ziemlich schwer sein, das Passwort irgendwie nachzuvollziehen.... schließlich weiß der Hacker ja gar ned, wie es überhaupt erstellt wurde *g*
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 01.03.2005, 18:05    Titel: Antworten mit Zitat

ich weiß gar nicht über was ihr redet, das mit ab und ba.

mag ja sein das das der Schlüssel-mit dem man randomize initalliisiert- der selbe ist aber das verschlüsselte Passwort-der String der am ende ensteht- ist doch völlig anders.

hab ich doch schon mal probiert zu beschreiben.(siehe oben)
oder ich hab immer noch nicht verstanden über was ihr redet zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 01.03.2005, 19:00    Titel: Antworten mit Zitat

Ach, so, du hast so was gemeint, wie:

Code:

FOR i = 1 TO LEN(pass$)
 byte = ASC(MID$(pass$, i, 1)) + RND * 256
 RANOMIZE byte
NEXT


?

Ja, das wäre möglich, aber damit bist du beim Chew-Crypto, und der is knackbar, da du einen Festen Startwert hast. Und damit kommt dann immer die selbe zahlenfolge raus, die auch zurückverfolgbar ist.

wäre zwar ziemlich schwer zu knacken, ist aber möglich.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 16.05.2005, 17:11    Titel: Antworten mit Zitat

Ich weiss, der Thread ist etwas verstaubt aber das Problem habe ich leider immer noch nicht lösen können. Auf jedenfall ist mir eine neue Idee gekommen:

Bei der Passworterstellung der der Benutzer ein Passwort mit der maximalen Länge von 128 Zeichen erstellt. Danach wird das Passwort in der Hälfte (oder wenn ungerade halt etwas mehr oder weniger) halbiert und beide Strings mit Zusätzlichen Zeichen auf die Länge von ja 64 Zeichen aufgefüllt. Danach verschlüssele ich den ersten String mit dem zweiten.

Bei der Passwortabfrage wird dann dasselbe getan ausser mit dem Unterschied dass das verschlüsselte mit dem zweiten Teil des Passwortes "entschlüsselt" wird. Und wenn dann das Entschlüsselte + der Zweite String das Passwort ergeben war die Abfrage erfolgreich...

So müsste es doch eigentlich ein nicht-entschlüsselbares Passwort mit einer Konstanten Länge entstehen oder habe ich einen Denkfehler gemacht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz