ich habe mal zwei kleine proceduren geschrieben zum ver- und entschlüsseln von Strings in Hexadecimalstrings.
Damit möchte ich passwörter verschlüsseln und diese dann Abspeichern.
Der "Key" ist dabei der Schlüssel welcher den richtigen RandomSeed() setzt.
Code: Alles auswählen
Structure CharacterArray
c.c[0]
EndStructure
Procedure.s Encrypt(String$, Key.q)
Protected Character = Pow(256,SizeOf(Character))
Protected StringLen = Len(String$)-1
Protected EncryptString$ = ""
Protected Dim Shift(StringLen)
RandomSeed(Key)
For n = 0 To StringLen
Shift(n) = Random(Character-1)
Next
*StringCharacter.CharacterArray = @String$
For n = 0 To StringLen
*StringCharacter\c[n] = ( *StringCharacter\c[n] + Shift(n) ) % Character
EncryptString$ + RSet(Hex(*StringCharacter\c[n]), SizeOf(Character)*2, "0")
Next
ProcedureReturn EncryptString$
EndProcedure
Procedure.s Decrypt(String$, Key.q)
Protected Character = Pow(256,SizeOf(Character))
Protected StringLen = Len(String$)/SizeOf(Character)/2-1
Protected DecryptString$ = Space(StringLen+1)
*DecryptStringCharacter.CharacterArray = @DecryptString$
Protected Dim Shift(StringLen)
RandomSeed(Key)
For n = 0 To StringLen
Shift(n) = Random(Character-1)
Next
For n = 0 To StringLen
*DecryptStringCharacter\c[n] = Val("$"+Mid(String$,n*SizeOf(Character)*2+1,SizeOf(Character)*2))
*DecryptStringCharacter\c[n] = ( *DecryptStringCharacter\c[n] - Shift(n) ) % Character
Next
ProcedureReturn DecryptString$
EndProcedure
Text$ = "Ich bin ein Satz"
Debug Text$
Encode$ = Encrypt(Text$, 2506198800)
Debug Encode$
Decode$ = Decrypt(Encode$, 2506198800)
Debug Decode$
Decode$ = Decrypt(Encode$, 2506198801)
Debug "Müll ^^ : "+Decode$
Jedes Zeichen wird verschoben, die Weite wird von Random bestimmt welches nur dann "richtig" ist wenn man vorher den Richtigen Key angibt.
Die neu entstandenen Zeichen werden dann in Hex umgewandeln.
Damit wird der String immer doppel so groß sein wie vorher, dafür kann man ihn auch in URLs usw. nutzen.
Da es für den 18.446.744.073.709.551.616 Möglichkeiten gibt (Double) denke ich mir jetzt das es doch sicher sein müsste oder ?
PS: Es sollte auch Unicode unterstützen (hoffe ich) wenn ich alles beachtet habe.
Wäre nett wenn ihr das mal Testet und mir auch sagt ob es "Sicher" ist.