Seite 1 von 1

Crypt() und Dbseek() [ERLEDIGT]

Verfasst: Fr, 17. Feb 2017 19:07
von Manfred
jetzt stehe ich vor der nächsten Wand. Wenn ich mit Crypt(upper()) einen Index aufbaue, dann muß ich doch auch mit Dbseek(crypt(Upper())) suchen?

Re: Crypt() und Dbseek()

Verfasst: Fr, 17. Feb 2017 20:47
von georg
Hallo, Manfred -


ja, wenn ...

Du solltest auf jeden Fall sicherstellen, dass der Suchbegriff exakt so lang ist wie das verschlüsselte Feld.

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 1:37
von brandelh
Im Prinzip schon, aber die Sortierung stimmt natürlich nicht ;-)

Also für dbseek() - suche nach genau diesem Satz ist OK, aber ob auch linksbündig (nur 4 Zeichen statt 20) geht, bin ich mir nicht mehr sicher.
Ich meine mich zu erinnern, dass die Zeichen von links gleich sind, auch wenn die Länge kürzer ist, dann die Ergebnisse entschlüsseln und in Auswahl Array.

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 7:55
von Manfred
hm, es geht eigentlich in darum, auch nur die ersten Zeichen zu finden. Selbst Softseek will nicht. Anders formuliert, wen ich den ersten Buchstaben eintippe, wird der auch gefunden. Sobald mehrere dazukommen, wird nichts mehr gefunden.
Der Schlüssel sieht so aus z.B.

Code: Alles auswählen

"Crypt(Upper(name),oSysPara:crypt) + Crypt(Upper(vorname),oSysPara:crypt)"
Engine ist Foxcdx
Set Charset OEM
Nur mal so als Einstiegsinfo.
Aber das mit der exakten Länge probiere ich mal sofort aus.

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 8:52
von Tom
Crypt() verschlüsselt nicht jeden Buchstaben einzeln. Wenn man AB cryptet und AC verschlüsselt, beginnen die u.U. unterschiedlich. Und ein einzelnes A wird ggf. nochmal anders verschlüsselt. So geht das nicht. Sonst wäre auch das Entschlüsseln viel zu einfach. ;)

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 8:56
von Manfred
ja, ist mir auch schon aufgefallen. Bei nur einem Buchstaben wird anscheinend gar nicht verschlüsselt. Aber deshalb ja meine Frage, was muß man da evtl. beachten? Wobei mich dann aber wieder wundert, warum der gefunden wird, wenn der nicht verschlüsselt wird? Aber vielleicht ist das auch Zufall? Ich muß mir das mal im Debugger ansehen, was bei nur einem Buchstaben passiert, bei Dbseek()

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 9:23
von AUGE_OHR
ich meine zu erinnern das die alte Tools Crypt() das nachfolgenden Zeichen zum verschlüsseln des vorherigen diente. ( XOR ? )
das letzte Zeichen wurde dabei dann nicht mehr verschlüsselt ... meistens ein SPACE

ein Inkrementelle Suchen auf einen gecrypten Index geht wegen der Länge nicht.
bei NTX kann man den Index im Klartext lesen aber CDX ist es doch komprimiert d.h. du kannst den Index auf "DeCrypt" aufbauen.

Re: Crypt() und Dbseek()

Verfasst: Sa, 18. Feb 2017 9:56
von Manfred
Der Februar kostet mich echt Nerven.
Jimmy, Dein Stichwort war Gold wert. Klar, indem ich einen Index auf Crypt aufbaue, entschlüssel ich ja in dem Moment wieder den Wert, der in dem feld steht. Und dann darf ich natürlich nicht mit Crypt() suchen, weil dann ja verschlüsselt gesucht wird. Das ist der Mist, wenn ein und dieselbe Funktion beides macht. Das übersieht man schonmal gerne. :lol:

Re: Crypt() und Dbseek()

Verfasst: Mo, 20. Feb 2017 8:43
von brandelh
Tom hat geschrieben:Crypt() verschlüsselt nicht jeden Buchstaben einzeln.
Wenn man AB cryptet und AC verschlüsselt, beginnen die u.U. unterschiedlich. Und ein einzelnes A wird ggf. nochmal anders verschlüsselt.
das ist nicht ganz richtig, von links gesehen sind bei gleichem String (ab 2 Byte), Passwort und gleicher Stelle die Ergebnisse identisch:

Code: Alles auswählen

PROCEDURE Main
   LOCAL cPW   := "asakjWslk342"
   LOCAL cTxt1 := "AAA-Test Crypt"
   LOCAL cTxt2 := "AAABTest Crypt"
   LOCAL x

   /* we use the ansi charset by default */
   SET CHARSET TO OEM

   SET ALTERNATE TO test.txt
   SET ALTERNATE ON

   ? "Teste Crypt, String von 1 bis 10 übersetzen"
   ? "PW: ",cPW
   ? "Txt1:",cTxt1
   ? "Txt2:",cTxt2

   FOR x := 1 to 10
       ? x,"1",crypt(left(cTxt1,x),cPW)
       ? x,"2",crypt(left(cTxt2,x),cPW)
   NEXT

   SET ALTERNATE OFF
   inkey(0)
   /* $TODO: place your application code here */
RETURN

ergibt:

Code: Alles auswählen

Teste Crypt, String von 1 bis 10 übersetzen
PW:  asakjWslk342
Txt1: AAA-Test Crypt
Txt2: AAABTest Crypt
         1 1 A
         1 2 A
         2 1 èı
         2 2 èı
         3 1 èı╝
         3 2 èı╝
         4 1 èı╝ƒ
         4 2 èı╝­
         5 1 èı╝ƒ♦
         5 2 èı╝­♦
         6 1 èı╝ƒ♦◄
         6 2 èı╝­♦◄
         7 1 èı╝ƒ♦◄Ø
         7 2 èı╝­♦◄Ø
         8 1 èı╝ƒ♦◄س
         8 2 èı╝­♦◄س
         9 1 èı╝ƒ♦◄س¶
         9 2 èı╝­♦◄س¶
        10 1 èı╝ƒ♦◄س¶O
        10 2 èı╝­♦◄س¶O

Re: Crypt() und Dbseek() [ERLEDIGT]

Verfasst: Mo, 20. Feb 2017 10:14
von ramses
Manfred

Hast du berücksichtigt das bei crypt() eigentlich jedes Zeichen im Ergebniss den Wert im Bereich von 0-255 haben kann? Die kannst du nicht direkt in Datenbankfelder schreiben! Ohne dass du diese zuerst noch in einen Hex String umwandelst wird du kein gutes Resulat sondern nur Probleme bekommen......

Eine einfach Variante wäre ADS-Database Server der bietet die einfache transparente Verschlüsselung, Passwort setzten, fertig.

Cu Carlo

Re: Crypt() und Dbseek() [ERLEDIGT]

Verfasst: Mo, 20. Feb 2017 10:45
von Manfred
Hi CArlo,
ist doch alles schon erledigt. Deshalb ja auch das [ERLEDIGT] dahinter. ;-)