ich versuche diesen Code http://www.purebasic.fr/english/viewtop ... 01#p374501 dazu zu bringen, die Testdateien von http://ciphersaber.gurus.org zu entschlüsseln.
Bisher vergeblich

Code: Alles auswählen
Procedure decrypt(mem, memLen, output, key, keyLen)
If keyLen > 245
keyLen = 245
ElseIf keyLen < 0
ProcedureReturn 0
EndIf
; define state array, key array and 10 byte IV vector
Dim S.a(255)
Dim k.a(255)
Dim V.a(9)
; setup index variables
i.i = 0
j.u = 0
n.u = 0
; grab 10 byte initialization vector (IV) from beggining of mem
For i = 0 To 9
V(i) = PeekA(mem + i)
Next
mem = mem + 10
; put first 246 bytes of key into K array
For i = 0 To keyLen
k(i) = PeekA(key + i)
Next
; add IV to end of user Key
For i = 0 To 9
k(keyLen + i) = V(i)
Next
keyLen = keyLen + 10
; set up state array
For i = 0 To 255
S(i) = i
Next
; mix up the state array
; For n = 1 To 10 ; 20 ist Standardwert von Ciphersaber-2, 10 wurde für die Testdatei 'cs2test1.cs2' benutzt
For i = 0 To 255
j = (j + S(i) + k(i % keyLen)) % 255
temp = S(i)
S(i) = S(j)
S(j) = temp
Next
; Next
; ciphering operation
j = 0
i = 0
For i = 0 To memLen
i = i % 255
j = (j + S(i)) % 255
temp = S(i)
S(i) = S(j)
S(j) = temp
PokeA(output + i, S((S(i) + S(j)) % 255) ! PeekA(mem + i))
Next
EndProcedure
If OpenConsole()
key.s = "asdfg"
*KeyID = AllocateMemory(Len(key))
PokeS(*KeyID, key)
length = ?CSTEST1end - ?CSTEST1
*OutputMemoryID = AllocateMemory(length-10) ; Dateilänge minus 10 IV-Bits
If *OutputMemoryID
decrypt(?CSTEST1, length, *OutputMemoryID, *KeyID, Len(key))
WriteConsoleData(*OutputMemoryID, length-10)
EndIf
EndIf
DataSection
CSTEST1:
Data.q $1967AAF3AB0B6D6F, $74CA77B6ED301503, $4385B8E7D09D08E0, $EFDB7CE34814BB56, $FDB35F4F4FA8F3E7
CSTEST1end:
EndDataSection
Viele Grüße,
Niklas