Der folgende Code funktioniert die ersten paar Male, dann kommt jedes mal ein Speicherzugriffsfehler. Kann mir jemand sagen warum? Ich kenne mich leider mit den Speichern nicht so gut aus.
P.S. Ich hab den Code leier schon durch meine Fixversuche ziemlich verhunzt.
Code: Alles auswählen
Procedure.s EncryptString(String.s,Schluessel.s)
*Schluessel = ReAllocateMemory(*Schluessel,Len(Schluessel.s) + 1)
*Initiierungsvektor = ReAllocateMemory(*Initiierungsvektor,32)
*CryptedString = ReAllocateMemory(*CryptedString,Len(String) + 1)
PokeS(*Schluessel,Schluessel,-1,#PB_Ascii)
;*** Schlüssellänge anpassen ***
If Len(Schluessel) + 1 <> 32
Schluessel.s = MD5Fingerprint(*Schluessel,MemorySize(*Schluessel)) ;Wenn die Schlüssellänge ungleich 128 bit ist, wird der Schlüssel
PokeS(*Schluessel,Schluessel.s,-1,#PB_Ascii) ;durch den MD5-Hashgenerator "gejagt" um ihn auf eine Länge von
;128 bit zu bringen (MD5-Hashes sind 128 bit groß)
EndIf
;*** Initiierungsvektor erstellen ***
If OpenCryptRandom() <> 0 And CryptRandomData(*Initiierungsvektor,32) <> 0 ;Öffnet den kryptografischen Zufallszahlengenerator
Else
ProcedureReturn ""
EndIf
;If MemorySize(*Initiierungsvektor) = 32 ;Testet ob alles seine Richtigkeit hat
;Else
; ProcedureReturn "" ;... und bricht ab wenn etwas nicht stimmt
;EndIf
CloseCryptRandom() ;Schließt den kryptografischen Zufallszahlengenerato
*CryptedString = AllocateMemory(Len(String)+1)
If AESEncoder(@String,*CryptedString,Len(String),*Schluessel,256,*Initiierungsvektor)
Else
ProcedureReturn ""
EndIf
;FreeMemory(*Schluessel)
;FreeMemory(*Initiierungsvektor)
ProcedureReturn PeekS(*CryptedString)
EndProcedure
Procedure EncryptData(*Daten,Schluessel.s)
*Schluessel = AllocateMemory(Len(Schluessel))
*Initiierungsvektor = AllocateMemory(32)
PokeS(*Schluessel,Schluessel)
;*** Schlüssellänge anpassen ***
If StringByteLength(Schluessel) <> 32
MD5Fingerprint(*Schluessel,MemorySize(*Schluessel)) ;Wenn die Schlüssellänge ungleich 128 bit ist, wird der Schlüssel
;durch den MD5-Hashgenerator "gejagt" um ihn auf eine Länge von
;128 bit zu bringen (MD5-Hashes sind 128 bit groß)
EndIf
;*** Initiierungsvektor erstellen ***
If OpenCryptRandom() <> 0 And CryptRandomData(*Initiierungsvektor,32) <> 0 ;Öffnet den kryptografischen Zufallszahlengenerator
Else
EndIf
If MemorySize(*Initiierungsvektor) = 32 ;Testet ob alles seine Richtigkeit hat
Else
ProcedureReturn 0 ;... und bricht ab wenn etwas nicht stimmt
EndIf
*CryptedData = AllocateMemory(MemorySize(*Daten))
If AESEncoder(*Daten,*CryptedData,MemorySize(Daten),*Schluessel,256,*Initiierungsvektor)
Else
ProcedureReturn 0
EndIf
ProcedureReturn *CryptedData
EndProcedure
For i = 17 To 500
For u = 17 To 50
String.s = ""
Schluessel.s = ""
X = 0
Repeat: String.s = String.s + Chr(Random(100) + 34): X = X + 1 :Until x = i
X = 0
Repeat: Schluessel.s = Schluessel.s + Chr(Random(100) + 34): X = X + 1 :Until x = u
Enc.s = EncryptString(String.s,Schluessel.s)
Debug "Enc: " + Str(Len(Enc)) + "String: " + Str(Len(String)) + "Schlüssel: " + Str(Len(Schluessel)) + Enc
Next
Next