Verschlüsselung - Text Datei in Zeichen aufteilen

Für allgemeine Fragen zur Programmierung mit PureBasic.
SpecialDXX
Beiträge: 29
Registriert: 08.07.2007 17:52
Kontaktdaten:

Verschlüsselung - Text Datei in Zeichen aufteilen

Beitrag 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
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Re: Verschlüsselung - Text Datei in Zeichen aufteilen

Beitrag 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
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Verschlüsselung - Text Datei in Zeichen aufteilen

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
SpecialDXX
Beiträge: 29
Registriert: 08.07.2007 17:52
Kontaktdaten:

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
SpecialDXX
Beiträge: 29
Registriert: 08.07.2007 17:52
Kontaktdaten:

Beitrag 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?
SpecialDXX
Beiträge: 29
Registriert: 08.07.2007 17:52
Kontaktdaten:

Beitrag von SpecialDXX »

Hat keiner eine Idee ?
Little John

Beitrag 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
Antworten