Code: Alles auswählen
EnableExplicit
Procedure.s StringEncoder( String$, Key$ )
Protected Size.l, *Input, *IV, *Ciphered, *Base64, Ciphered$
If String$
Size = StringByteLength( String$ ) + SizeOf(Character)
If Size < 16 : Size = 16 : EndIf
*Input = AllocateMemory( Size )
If *Input
PokeS( *Input, String$ )
Key$ = MD5Fingerprint( @Key$, StringByteLength( Key$ ) )
*IV = AllocateMemory( 16 )
CryptRandomData( *IV, 16 )
*Ciphered = AllocateMemory( Size + 16 )
If *Ciphered
CopyMemory( *IV, *Ciphered, 16 )
AESEncoder( *Input, *Ciphered + 16, Size, @Key$, 256, *IV, #PB_Cipher_CBC )
*Base64 = AllocateMemory( Size * 1.35 + 64 )
If *Base64
Size = Base64Encoder( *Ciphered, Size + 16, *Base64, Size * 1.35 + 64 )
Ciphered$ = PeekS( *Base64, Size, #PB_Ascii)
FreeMemory( *Base64 )
EndIf
FreeMemory( *Ciphered )
EndIf
FreeMemory( *IV )
FreeMemory( *Input )
EndIf
EndIf
ProcedureReturn Ciphered$
EndProcedure
Procedure.s StringDecoder( String$, Key$ )
Protected Size.l, *IV.l, *Deciphered, *Base64, Deciphered$, *Buffer
If String$
Size = StringByteLength(String$, #PB_Ascii) + SizeOf(Character)
*Base64 = AllocateMemory( Size + 64 )
If *Base64
*Buffer = AllocateMemory(Size)
PokeS(*Buffer, String$, StringByteLength(String$, #PB_Ascii), #PB_Ascii)
Size = Base64Decoder( *Buffer, StringByteLength(String$, #PB_Ascii), *Base64, Size + 64 )
Key$ = MD5Fingerprint( @Key$, StringByteLength( Key$ ) )
*IV = AllocateMemory( 16 )
CopyMemory( *Base64, *IV, 16 )
*Deciphered = AllocateMemory( Size - 16 )
If *Deciphered
AESDecoder( *Base64 + 16, *Deciphered, Size - 16, @Key$, 256, *IV, #PB_Cipher_CBC )
Deciphered$ = PeekS( *Deciphered )
FreeMemory( *Deciphered )
EndIf
FreeMemory( *IV )
FreeMemory( *Base64 )
FreeMemory( *Buffer )
EndIf
EndIf
ProcedureReturn Deciphered$
EndProcedure
OpenCryptRandom()
Define String$ = "Hallo Welt + Hallo Welt + Hallo Welt"
Debug String$
String$ = StringEncoder( String$, "Test" )
Debug String$
String$ = StringDecoder( String$, "Test" )
Debug String$