Eigenes Musik-Dateiformat

Für allgemeine Fragen zur Programmierung mit PureBasic.
Nord
Beiträge: 5
Registriert: 08.11.2006 13:35

Beitrag von Nord »

Oder verschlüssele die Datei im Speicher, also sowas wie:
A) Lade verschlüsselte Datei in den Speicher
B) entschlüssele sie dort, z.B. durch simplen XOR
C) Nutze CatchSound
Das hört sich nach ner guten Idee an, leider bin ich in solchen Sachen noch ein ziemlicher Anfänger.

Hättest du vieleicht mal ein Beispiel, wie das ganze in PureBasic aussehen würde.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Sowas hier in der Art:

Code: Alles auswählen

#Key = $7F368CA2

InitSound()
UseOGGSoundDecoder()

Procedure SimpleDecode(*mem.l, length.l, key.l)
  For i = 0 To length Step 4
    PokeL(*mem + i, PeekL(*mem + i) ! key)
  Next
EndProcedure

Procedure SimpleEncode(*mem.l, length.l, key.l)
  For i = 0 To length Step 4
    PokeL(*mem + i, PeekL(*mem + i) ! key)
  Next
EndProcedure

Procedure CreateEncodedFile(filename.s)
  ReadFile(0, filename)
    length = Lof(0)
    *mem = AllocateMemory(length)
    ReadData(0, *mem, length)
  CloseFile(0)
  
  SimpleEncode(*mem, length, #Key)
  
  OpenFile(0, filename + ".enc")
    WriteData(0, *mem, length)
  CloseFile(0)
  
  FreeMemory(*mem)
EndProcedure


Procedure LoadEncodedSoundFile(filename.s)
  ReadFile(0, filename)
    length = Lof(0)
    *mem = AllocateMemory(length)
    ReadData(0, *mem, length)
  CloseFile(0)
  
  SimpleDecode(*mem, length, #Key)
  
  sound = CatchSound(#PB_Any, *mem)
  
  FreeMemory(*mem)
  
  ProcedureReturn sound
EndProcedure

;- wähle eine bereits verschlüsselte .enc-Datei oder eine wav oder ogg-Datei
filename.s = OpenFileRequester(".wav-file", "C:\", "*.enc|*.enc|*.wav|*.wav|*.ogg|*.ogg", 0)
If filename = ""
  End
EndIf

;- Wenn nicht .enc, dann verschlüssele die Datei
If SelectedFilePattern() <> 0
  CreateEncodedFile(filename)
EndIf

;- Jetzt ist "filename.enc" die verschlüsselte Datei
;- Nun laden wir sie
sound.l = LoadEncodedSoundFile(filename + ".enc")

PlaySound(sound)

Delay(10000)
Die Verschlüsselung mit festem XOR-key ist natürlich sehr simpel. Ein 'Angreifer' braucht nur die Originaldatei (falls vorhanden) mit der encodeten zu xoren, und schon hat er den key. Liegt ihm die Originaldatei nicht vor, so wird es schon etwas schwieriger, jedoch kann er vermuten, dass es sich um .wav oder .ogg handelt, und dann an markanten Stellen im Header den Key versuchen zu erraten.

Da könntest du dir aber eine schönere Verschlüsselung einbauen. Ggf. wird der Key sogar passwortgeneriert und dann mit fortlaufenden MD5-Hashes des ketzten keys rekursiv neu berechnet, oder irgendwie sowas.

Viel Spaß beim weiterbasteln!
!UD2
Antworten