OK. Hier ist meine Verschlüsselung.
Code: Alles auswählen
EnableExplicit
#Gay_Data=4
#Gay_Elementar=2
#Gay_Char=$100
#Gay_Pass_Added_i = 2
#Gay_Pass_Added_t = 4
#Gay_Pass_o = $100
#Gay_Pass_i = 2
#Gay_Pass_t = 4
Structure Gay_elementar
c.c[#Gay_Char]
EndStructure
Structure Gay_data
elementar.Gay_elementar[#Gay_Elementar]
EndStructure
Structure Gay
gData.Gay_data[#Gay_Data]
EndStructure
Structure Gay_Pass_Added_t
i.l[#Gay_Pass_Added_i];0,1
EndStructure
Structure Gay_Pass_Added
t.Gay_Pass_Added_t[#Gay_Pass_Added_t];0,1,2,3
EndStructure
Structure Gay_Pass_t_i
o.l[#Gay_Pass_o]; 0 - 255
EndStructure
Structure Gay_Pass_t
i.Gay_Pass_t_i[#Gay_Pass_i]; 0, 1
EndStructure
Structure Gay_Pass
t.Gay_Pass_t[#Gay_Pass_t]; 0, 1, 2, 3
EndStructure
Enumeration ;Gay_Security
#Gay_Security_Small = 1 ; Das Passwort wird normal wie eingegeben Angenommen. Nach 255/256 Zeichen wird kein Zeichen mehr eingelesen.
#Gay_Security_WithHash ; Ein Hashwert wird aus dem Passwort erstellt
#Gay_Security_WithPatchedHash ; Wie 'WithHash' nur das die Zeichen nicht mehr nahe bei einander liegen.
EndEnumeration
Prototype.l __CryptGay_PasswordCallback(tData.b, ielementar.b, obit.b, h, sHash.s)
Procedure.l __CryptGay_CreatePassword(sPassword.s, bSecurity, *added.Gay_Pass_Added = #Null, Callback.__CryptGay_PasswordCallback = #Null)
Protected *pass.Gay_Pass = AllocateMemory(SizeOf(Gay_Pass))
If bSecurity = #Gay_Security_WithHash Or bSecurity = #Gay_Security_WithPatchedHash
sPassword=MD5Fingerprint(@sPassword, Len(sPassword)) ;32-Zeichen-Code
If bSecurity = #Gay_Security_WithPatchedHash
sPassword=ReplaceString(sPassword, "1", Chr(210), #True)
sPassword=ReplaceString(sPassword, "2", Chr(225), #True)
sPassword=ReplaceString(sPassword, "3", Chr(195), #True)
sPassword=ReplaceString(sPassword, "4", Chr(15), #True)
sPassword=ReplaceString(sPassword, "5", Chr(30), #True)
sPassword=ReplaceString(sPassword, "6", Chr(75), #True)
sPassword=ReplaceString(sPassword, "7", Chr(90), #True)
sPassword=ReplaceString(sPassword, "8", Chr(60), #True)
sPassword=ReplaceString(sPassword, "9", Chr(105), #True)
sPassword=ReplaceString(sPassword, "0", Chr(0), #True)
sPassword=ReplaceString(sPassword, "a", Chr(135), #True)
sPassword=ReplaceString(sPassword, "b", Chr(180), #True)
sPassword=ReplaceString(sPassword, "c", Chr(150), #True)
sPassword=ReplaceString(sPassword, "d", Chr(165), #True)
sPassword=ReplaceString(sPassword, "e", Chr(120), #True)
sPassword=ReplaceString(sPassword, "f", Chr(45), #True)
EndIf
EndIf
Protected lPassLen.l = Len(sPassword)
Protected t.l, i.l, o.l, h.l, lWert.l
If *added = #Null
*added = AllocateMemory(SizeOf(Gay_Pass_Added))
*added\t[0]\i[0] = '00'
*added\t[0]\i[1] = '01'
*added\t[1]\i[0] = '10'
*added\t[1]\i[1] = '11'
*added\t[2]\i[0] = '20'
*added\t[2]\i[1] = '21'
*added\t[3]\i[0] = '30'
*added\t[3]\i[1] = '31'
EndIf
For t=0 To #Gay_Data-1 ; data
For i=0 To #Gay_Elementar-1 ; elementar
For o=0 To #Gay_Char-1 ; bit
h=o+1 ; Hash-Char
While h < 1 Or h > lPassLen
If h < 1
h+1
Else
h-lPassLen
EndIf
Wend
If Callback
lWert = Callback(t, i, o, h, Mid(sPassword, h, 1))
Else
lWert='0'*(Asc(Mid(sPassword, h, 1))+h)
EndIf
;{ Sicherung von der Fehlermeldung: 'Modulo zero is forbidden (result in a zero divide).'
If lWert = 0
lWert = -1
EndIf
;}
lWert = *added\t[t]\i[i] + lWert
*pass\t[t]\i[i]\o[o] = lWert
Next o
Next i
Next t
ProcedureReturn *pass
EndProcedure
Procedure.b CryptGay(*InputBuffer, *OutputBuffer, InputBufferLen, Password.s, bSecurity.b = #Gay_Security_WithPatchedHash, *pass.Gay_Pass = #Null) ; Verschlüssler
Protected NewList gay.Gay()
Protected l.l, i.l, t.l, o.l
Protected sOutput.s
If *pass.Gay_Pass = #Null
*pass.Gay_Pass = __CryptGay_CreatePassword(Password, bSecurity)
EndIf
For l = 1 To InputBufferLen Step 4*2*256 ; data*elementar
AddElement(gay())
For t = 0 To #Gay_Data-1 ; data
For i = 0 To #Gay_Elementar-1 ; elementar
For o = 0 To #Gay_Char-1 ; bit
gay()\gData[t]\elementar[i]\c[o]=PeekC(*InputBuffer+t*i*o)
Next o
Next i
Next t
Next l
Protected l1.l, lkey.l, a, b, c
ForEach gay()
For t = 0 To #Gay_Data-1 ; data
For i = 0 To #Gay_Elementar-1 ; elementar
For o = 0 To #Gay_Char-1 ; bit
l1 = *pass\t[t]\i[i]\o[o]
gay()\gData[t]\elementar[i]\c[o] = l1 / (o-$100) - gay()\gData[t]\elementar[i]\c[o]
Next o
Next i
Next t
Next gay()
ForEach gay()
For t = 0 To #Gay_Data-1 ; data
For i = 0 To #Gay_Elementar-1 ; elementar
For o = 0 To #Gay_Char-1 ; bit
If t*i*o >= InputBufferLen
Break 4
EndIf
PokeC(*OutputBuffer+t*i*o, gay()\gData[t]\elementar[i]\c[o])
Next o
Next i
Next t
Next gay()
ProcedureReturn #True
EndProcedure
Define String.s = "- MC-1162104643.1497713503.0-Co -"
Debug String + "#INPUT"
Define lTime.l
Define Output.s = Space(Len(String))
lTime = ElapsedMilliseconds()
CryptGay(@String, @Output, Len(String), "CrazyFrog")
Debug Output + "#VERSCHLÜSSELT"
Debug ElapsedMilliseconds()-lTime
Define String2.s = Space(Len(String))
lTime = ElapsedMilliseconds()
CryptGay(@Output, @String2, Len(Output), "CrazyFrog")
Debug String2 + "#ENTSCHLÜSSELT"
Debug ElapsedMilliseconds()-lTime