Seite 1 von 2

Verschlüsselung - Text Datei in Zeichen aufteilen

Verfasst: 20.11.2007 23:37
von SpecialDXX
Hallo, ich möchte eine Verschlüsselung bauen.
Jedes Zeichen soll ersetzt werden.

So das dannach nur noch ein Code entsteht.

Ich hab das mal versucht nur leider liest er die Zeichen nicht hinter einander aus.

Code: Alles auswählen


file$ = OpenFileRequester("Encode in S2-1", "", "", "")
fileout$ = SaveFileRequester("Encode", "encode.txt", "", "")

inp$ = "23R4"

If CreateFile(1, fileout$)
 If ReadFile(2, file$)
  UseFile(1)
  WriteStringN("Code: SS2 "+inp$)
  WriteStringN("")
  WriteString("S2-1:")
  While Eof(2) = 0
   UseFile(2)
   string$ = ReadString()
   x=1
   Repeat
    erg$ = ""
    laenge=0
    laengex=0
    erg$ = StringField(string$,x," ")
    ergg$ = LCase(erg$)
    laenge = Len(ergg$)
    laengex = laenge
    laengex=laengex-1
    xy=1
    Repeat
     For ch=97 To 122 
      ergggg$ = LSet(ergg$, laengex)
      MessageRequester("",ergggg$)
      posi = FindString(ergggg$, Chr(ch), xy)
      If posi > 0
       UseFile(1)
       Select ch
        Case  97 : WriteString("0A")
        Case  98 : WriteString("AA")
       EndSelect
      EndIf
      Delay(1)
     Next
     xy=xy+1
     laengex=laengex-1
    Until xy = laenge
     Delay(1)
    x=x+1
   Until erg$ = ""
  Wend
  CloseFile(2)
 EndIf
 CloseFile(1)
EndIf

Bei diesem Code werden nur die Buchstaben A und B codiert. (Wegen der nicht Veröffentlichung der Codierung)

Wenn die Datei text.txt geöffnet wird mit "ABBAAAB" und der Code in encode.txt gespeichert wird steht dort drinn "AAAABBB"!

Ich hoffe jemand versteht das Problem und kann mir schnells möglich helfen.

Vielen Dank
SpecialDXX

Verfasst: 21.11.2007 00:48
von Franky
Also, mit dem Code kann ich dir nicht helfen, da komm ich einfach nicht mit klar.

Ich kann dir nur einige Tips geben:

Zur Verarbeitung mach es so:
Für jede Textzeile:
1.)Textzeile einlesen in eine Variable
2.)Den Text in dieser Variable oder in eine andere rüber verschlüsseln
3.)Den Text gesamt in die Datei schreiben.

Um es zu Überarbeiten, geh am besten so vor:

Code: Alles auswählen

Structure Byte
  wert.b
EndStructure
UseFile(1)
string.s=ReadSTring()
*MeinText.Byte=string ; oder @string, da bin ich mir jetzt nicht sicher
While *MeinText\wert<>0 ;0 zeigt das Ende des Strings an
   ;Hier kannst du dann den Wert des momentanen Buchstaben überarbeiten
 *MeinText+1 ;Zum nächsten Buchstaben springen
wend 
Hinweis:
1.) *MeinText\wert ist ein ByteWert. Um den richtigen Wert raus zu kriegen musst du einfach *Meintext\wert&$FF schreiben. Das setzt das
Vorzeichenbit so, dass du eine Vorzeichenlose Variable hast. Wenn du PB4.0 haben solltest (was ja nicht so scheint) kannstdu auch Char (.c) nehmen
2.)Umwandlung von String in Byte mittels Asc("H"), umgekehrt mittels Chr(13) (<-Zeilenumbruch)

So, ich hoffe mal, das hat dir geholfen

Re: Verschlüsselung - Text Datei in Zeichen aufteilen

Verfasst: 21.11.2007 09:36
von ZeHa
SpecialDXX hat geschrieben:(Wegen der nicht Veröffentlichung der Codierung)
Wofür genau brauchst Du das? Ist das nur so zum Spaß, oder willst Du ernsthaft Daten damit schützen? Falls letzteres solltest Du Dir vielleicht erst das hier durchlesen: http://en.wikipedia.org/wiki/Security_by_obscurity

Verfasst: 21.11.2007 11:52
von AND51
@ Franky:
Warum soll er zeile für zeile parsen?
ReadCharacter(), dann klappt's auch mit dem File! :wink:
Dieser Befehl liest ein Zeichen aus, ist doch praktisch!
Ach ja und da wo du dir nicht sicher warst: Da kommt schon ein @ hin.
Außerdem solltest du darauf hinweisen, dass du nicht einfach nur um 1 weiterspringen darfst (Unicodemodus!!!!!). Also ggf. 2 Schritte oder dynamscih mit SizeOf(Character).
Ebenfalls ist Byte etwas depreciated an dieser Stelle, denn wozu gibt es den Datentyp .Character?

Nicht böse gemeint und nimm's mir nicht übel, aber du solltest dein Praser-Wissen nochmal erneuern/auffrischen!

Re: Verschlüsselung - Text Datei in Zeichen aufteilen

Verfasst: 21.11.2007 13:52
von Thorium
ZeHa hat geschrieben:
SpecialDXX hat geschrieben:(Wegen der nicht Veröffentlichung der Codierung)
Wofür genau brauchst Du das? Ist das nur so zum Spaß, oder willst Du ernsthaft Daten damit schützen? Falls letzteres solltest Du Dir vielleicht erst das hier durchlesen: http://en.wikipedia.org/wiki/Security_by_obscurity
Da hat ZeHa vollkommen recht. Es kommt halt immer drauf an was man machen will. Wenn du z.B. Dateien auf deiner Festplatte schützen willst, solltest du ein anderes System für deine Verschlüsslung wählen, welches auf einem Schlüssel als Sicherheit beruht. Andernfalls musst du dir klar sein das deine Verschlüsslung knackbar ist, egal ob jemand die Tabelle für die Übersetzung hat oder nicht.

Verfasst: 23.11.2007 00:23
von SpecialDXX
Ich hab das mal etwas geändert:

Code: Alles auswählen

Structure Byte
 StructureUnion
  wert.b
 EndStructureUnion
EndStructure
Jetzt kommt aber nur noch: Zeile 1: 'Structure' or 'Interface' already declared: Byte

Ansonsten ist der Code völlig ok! Ich habe die Verschlüsselung eingebaut.. ..sieht alles sehr gut aus. Jetzt muss es nur noch laufen.

Aber könnte mir AND51 erklären was er mit SizeOf(Character) andeuten will. Character habe ich nirgendwo gefunden.

Verfasst: 23.11.2007 01:43
von NicTheQuick
Die Struktur 'Byte' musst du nicht definieren. Sie ist genau wie 'Character',
'Word', 'Float', 'Double', 'Long', 'Quad' und 'String' vordefiniert.
Die Character-Struktur ist allerdings angepasst an den Unicode-Modus.
Also wenn du in den Compileroptionen "Unicode-Modus" aktivierst, ist
'SizeOf(Character)' gleich 2, ansonsten 1.

Den Unterschied merkst du z.B. in folgendem Code:

Code: Alles auswählen

Text.s = "Hallo"

Debug "mit Character"
*c.Character = @Text
While *c\c
  Debug *c\c
  *c + SizeOf(Character)
Wend

Debug ""
Debug "mit Byte"
*b.Byte = @Text
While *b\b
  Debug *b\b
  *b + SizeOf(Byte)
Wend
Wenn du ihn ohne "Unicode-Modus" ausführst, geben beide Codes das
selbe aus. Mit "Unicode-Modus" allerdings nicht mehr, weil sich die
Byte-Struktur nicht an die "neue" Zeichenlänge (character size) angepasst
hat.

Verfasst: 23.11.2007 12:21
von SpecialDXX

Code: Alles auswählen

Structure byt
 StructureUnion
  wert.b
 EndStructureUnion
EndStructure


file$ = OpenFileRequester("Encode in S2-1", "", "", "")
fileout$ = SaveFileRequester("Encode", "encode.txt", "", "")

If CreateFile(1, fileout$)
 If ReadFile(2, file$)
  UseFile(1)
  WriteStringN("Code: Pxxxxx "+inp$)
  WriteStringN("")
  WriteString("S2-1:")
  
  
  While Eof(2)
   UseFile(2)
   string.s=ReadString()
   *MeinText.byt=@string
 
   While *MeinText\wert<>0 ;0 zeigt das Ende des Strings an
    zeichen$ = Str(*MeinText)
    UseFile(1)
    Select Asc(zeichen$)
     Case  97 : WriteString("0A")
     ; (...)
    EndSelect
    
    *MeinText+1 ;Zum nächsten Buchstaben springen
   Wend
   UseFile(1)
   WriteStringN(":")
  Wend
  CloseFile(2)
 EndIf
 CloseFile(1)
EndIf
Leider wandelt dieser Code nicht die Zeichen um. Wieso?

Verfasst: 25.11.2007 20:38
von SpecialDXX
Hat keiner eine Idee ?

Verfasst: 25.11.2007 21:41
von Little John
SpecialDXX hat geschrieben:Leider wandelt dieser Code nicht die Zeichen um. Wieso?
Der Code ist ja gar nicht lauffähig, denn die Zeile

Code: Alles auswählen

file$ = OpenFileRequester("Encode in S2-1", "", "", "")
ruft einen Syntaxfehler hervor.

Ansonsten fällt mir z.B. die Zeile

Code: Alles auswählen

While Eof(2)
auf, die ich ziemlich ungewöhnlich finde.

Gruß, Little John