Seite 1 von 1

String in DataSection?

Verfasst: 11.02.2017 13:46
von purebas
Es ist schon sehr lange her, dass ich mit PB programmierte.
Ich schau mir gerade ein Beispiel aus der PB-Hilfe an.
Ich möchte den String$ aus der DataSection heraus ziehen.
Ich übe nur, bitte nicht den Sinn hinterfragen.

Code: Alles auswählen

; Verschlüsseln eines Strings
  ;String$ = "ABCDEFGHIJKLMNOP"
  String$ = ?Txt

  StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Platz für den null-terminierten String mit seiner abschließenden Null
  *CipheredString = AllocateMemory(StringMemorySize)   
  *DecipheredString = AllocateMemory(StringMemorySize) 
  
  If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Ciphered: "+PeekS(*CipheredString) ; Warning: wird beim ersten Null-Byte angehalten, nur für Demo-Zwecke
    
    AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Deciphered: "+PeekS(*DecipheredString)
  EndIf

  DataSection
    Txt:
      Data.b $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $80

    Key:
      Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  
    InitializationVector:
      Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
  EndDataSection

Re: String in DataSection?

Verfasst: 11.02.2017 14:14
von _JON_

Code: Alles auswählen

String$ = PeekS(?Txt, 16, #PB_Ascii)

Re: String in DataSection?

Verfasst: 12.02.2017 13:54
von purebas
Wenn in Txt eine 0 drinsteht, dann klappt es nicht mehr. Ansonsten schon.
Wie stelle ich die AES-Funktionsaufrufe so um, dass es einen ByteBuffer und keinen StringBuffer verarbeitet?

Re: String in DataSection?

Verfasst: 12.02.2017 19:05
von Sicro
purebas hat geschrieben:Wenn in Txt eine 0 drinsteht, dann klappt es nicht mehr. Ansonsten schon.
Das liegt daran, weil in Strings keine Null-Zeichen vorkommen dürfen. Sie stellen das Ende eines Strings dar.
purebas hat geschrieben:Wie stelle ich die AES-Funktionsaufrufe so um, dass es einen ByteBuffer und keinen StringBuffer verarbeitet?
Die Encoder/Decoder von AES arbeiten bereits binär. Die Problemverursacher sind StringByteLength() und PeekS(), weil die die Daten nur bis zum Null-Zeichen verarbeiten.

Ich habe dir mal schnell einen Beispiel-Code geschrieben, der veranschaulicht, wie binäre Daten verschlüsselt und wieder entschlüsselt werden:

Code: Alles auswählen

EnableExplicit

Define Output$
Define *DataBuffer, *CipheredDataBuffer, *DecipheredDataBuffer
Define i

; Größe des DataBuffers festlegen
Define LengthOfDataBuffer = 16 ; 16 ist Minimum

; Speicher reservieren
*DataBuffer           = AllocateMemory(LengthOfDataBuffer)
*CipheredDataBuffer   = AllocateMemory(LengthOfDataBuffer)
*DecipheredDataBuffer = AllocateMemory(LengthOfDataBuffer)
If *DataBuffer = 0 Or *CipheredDataBuffer = 0 Or *DecipheredDataBuffer = 0
  Debug "Speicher konnte nicht reserviert werden!"
  End
EndIf

; Ein Long-Wert in den DataBuffer schreiben
PokeL(*DataBuffer, 123456)

; Daten ausgeben
For i = 0 To LengthOfDataBuffer
  Output$ + Hex(PeekB(*DataBuffer + i), #PB_Byte) + " "
Next
Debug "Daten im Hex-Format:"
Debug Output$
Debug "----------------------------"

; DataBuffer verschlüsseln
If Not AESEncoder(*DataBuffer, *CipheredDataBuffer, LengthOfDataBuffer, ?Key, 128, ?InitializationVector)
  Debug "Verschlüsselung fehlgeschlagen!"
  End
EndIf

; Verschlüsselte Daten ausgeben
Output$ = ""
For i = 0 To LengthOfDataBuffer
  Output$ + Hex(PeekB(*CipheredDataBuffer + i), #PB_Byte) + " "
Next
Debug "Verschlüsselte Daten im Hex-Format:"
Debug Output$
Debug "----------------------------"

; DataBuffer entschlüsseln
If Not AESDecoder(*CipheredDataBuffer, *DecipheredDataBuffer, LengthOfDataBuffer, ?Key, 128, ?InitializationVector)
  Debug "Entschlüsselung fehlgeschlagen!"
  End
EndIf

; Entschlüsselte Daten ausgeben
Output$ = ""
For i = 0 To LengthOfDataBuffer
  Output$ + Hex(PeekB(*DecipheredDataBuffer + i), #PB_Byte) + " "
Next
Debug "Entschlüsselte Daten im Hex-Format:"
Debug Output$
Debug "----------------------------"

DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  
  InitializationVector:
  Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
EndDataSection