Seite 1 von 1
frage zu zwei alten Purebasic Funktionen
Verfasst: 21.06.2007 05:08
von Neutrino
Hallo *
ich habe hier einen sourcecode der mit einer älteren Purebasic version erstellt worden ist, vermutlich < 2.90 .
hier giebt es 2 Funktionen
CryptString() und DecrypString() anscheinend zum verschlüsseln von
strings, da ziemlich viele verschlüsselte Strings in dem code vorkommen und ich ihn gerne Kompatibel zu der neusten PB version machen will, lautet meine
frage was genau die beiden Funktionen machen bzw ob es ähnliche Funktionen in der neuen PB version giebt. Einträge wie zB
; "application/exe"
s.s = "115BA17F6B3557588CF6004F502AAF00"
Global RES_STRING_mimetype_exe$
RES_STRING_mimetype_exe$ = DecryptString(s,code$)
sind massenweise in dem code vorhanden.
vielen Dank im vorraus für die Hilfe
Verfasst: 21.06.2007 11:25
von D@nte
Ich wag mal zu behaupten, dass es sich dabei nicht um PB interne Befehle handelt sondern um Prozeduren...
Da weder
CryptString() noch
DecryptString() in der PB Hilfe unter Geschichte erwähnt werden...
Genau gesagt scheint es sich dabei um die RC4-Lib zu handen...
Nach Suche im englischen Forum:
Code: Alles auswählen
; This example uses Paul's RC4 lib.
Debug CryptString("StringToBeEncrypted",pw$)
Debug DecryptString("AC814A672259E0C12334EE125139D616A964C200",pw$)
Verfasst: 21.06.2007 13:02
von PureBasic4.0
Wenn du was verschlüsseln willst, schau in der PB-Help nach oder nehm ne UserLib von PureArea.
Zum Strings ver/entschlüsseln:
Entweder intern Base64De/Encoder
oder von PureArea CaesarChifree
Ob es eine Lib für CaesarChifree gibt, weiß ich nicht. Hab's nur mal auf PureArea gesehen.
Verfasst: 21.06.2007 13:58
von jear
@Neutrino
Diese Routinen emulieren die Lib von Paul Leischow.
Code: Alles auswählen
;- Umwandlung HEX-String zu Long (dezimal)
Procedure.l Hex2Dec(HexValue.s)
Protected x.s, i.w, l.w, n.l, result.l
x = LCase(HexValue) : l = Len(x)
result = 0
For i = 1 To l
result * 16
n = FindString("0123456789abcdef", Mid(x, i, 1), 1) - 1
result + n
Next i
ProcedureReturn result
EndProcedure
;- RC4-Verschlüsselung
Procedure.l RC4_Mem(Mem.l, memLen.l, key.s)
Protected i.l, t.l, x.l, j.l, temp.l, y.l, l.l
Protected *Sp.Long, *KeyP.Byte, *Memm.Byte
If key
Dim S.l(255) : Dim K.l(255)
j = 1 : l = Len(key)
*Sp = @S() : *KeyP = @key
For i = 0 To 255
*Sp\l = i : *Sp + 4
If *KeyP\b = 0 : *KeyP = @key : EndIf
K(i) = *KeyP\b : *KeyP+1
Next i
j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) & 255
temp = S(i) : S(i) = S(j)
S(j) = temp
Next i
i = 0 : j = 0 : *Memm = Mem
For x = 0 To memLen -1
i = (i+1) & 255 : j = (j + S(i)) & 255
temp = S(i) : S(i) = S(j) : S(j) = temp
t = (S(i) + (S(j) & 255)) & 255
y = S(t) : *Memm\b ! y : *Memm + 1
Next
EndIf
ProcedureReturn Mem
EndProcedure
Procedure.s CryptString(String.s, key.s)
Protected i.l, memLen.l, result.s, *Mem
memLen = Len(String)
*Mem = AllocateMemory(memLen)
PokeS(*Mem, String, memLen)
RC4_Mem(*Mem, memLen, key)
result = ""
For i = 0 To memLen -1
result + RSet(Hex(PeekB(*Mem + i) & $FF), 2, "0")
Next
FreeMemory(*Mem)
ProcedureReturn result
EndProcedure
Procedure.s DecryptString(String.s, key.s)
Protected i.l, l.l, b.l, a.s, *Mem
l = Len(String)/2 : If l = 0 : ProcedureReturn : EndIf ; ===================>
*Mem = AllocateMemory(l)
If *Mem = 0 : ProcedureReturn : EndIf ; ===================>
For i = 0 To l -1
a = Mid(String ,i*2 +1, 2)
b = Hex2Dec(a) : PokeB(*Mem+i, b)
Next
RC4_Mem(*Mem, l, key) : String = PeekS(*Mem, l)
FreeMemory(*Mem)
ProcedureReturn String
EndProcedure
key.s = "menetekel"
String.s = "Emulation von Paul Leischows RC4 Crypt/Decrypt"
Debug String
String = CryptString(String.s, key.s)
Debug String
String = DecryptString(String.s, key.s)
Debug String
Verfasst: 21.06.2007 18:31
von ts-soft
@jear
Nur falls Du das öfters verwendest: Siehe Dir in der RC4 Routine die Zeilen
mit temp an, wenn Du da SWAP nimmst wirds richtig schnell
