Re: XOR und Strings
Verfasst: 11.11.2015 16:36
Möglicherweise eine blöde Frage, aber hattest du den Debugger an?
*hust* Ähhm oops? JoNicTheQuick hat geschrieben:Möglicherweise eine blöde Frage, aber hattest du den Debugger an?
TroaX hat geschrieben:Doofe Frage. Aber wie schreibe ich einen Quadwert, der maximal 255 beträgt in, in eine Byte-Variable. Als Beispiel Quadwert 155.
Code: Alles auswählen
x.q = 155
y.a = x
Debug x
Debug y
Danke! War aber ein total dämlciher Denkfehler von mir. Hätte ich nur mal in die Doku gesehen. Man arbeitet ja zu wenig mit BytesNino hat geschrieben:TroaX hat geschrieben:Doofe Frage. Aber wie schreibe ich einen Quadwert, der maximal 255 beträgt in, in eine Byte-Variable. Als Beispiel Quadwert 155.Code: Alles auswählen
x.q = 155 y.a = x Debug x Debug y
Cool danke. ASM ist da nicht so meine Stärke. Und ich habe das Gefühl, das es nur so schneller gehen wird. Dann kann ich mich ja nochmals um die Generatoren kümmern. Die habe ich bisher immer nur mit Standard-Random gemacht. Ich werde die mal nach CryptRandom umbauen und vor allem die ganze Lib in ein Modul packen.NicTheQuick hat geschrieben:Wenn ich zu hause bin, baue ich dir noch eine schnelle Methode. Ich werde das doch wohl hinkriegen schneller zu sein als die ollen Stringfunktionen.
Code: Alles auswählen
EnableExplicit
Global Dim HexTable.a(127)
Procedure init()
Protected i
For i='0' To '9'
HexTable(i)=(i-'0')
Next
For i='a' To 'f'
HexTable(i)=(i-'a'+10)
Next
For i='A' To 'F'
HexTable(i)=(i-'A'+10)
Next
For i=0 To 15
HexTable(i)=Asc(Hex(i))
Next
EndProcedure
init()
Procedure.s XOrHexString(a.s, b.s)
Protected *a.Character = @a, *b.Character = @b
Protected x.i
If Len(a) <> Len(b)
ProcedureReturn ""
EndIf
While *a\c
*a\c - '0' - Bool(*a\c >= 'A') * ('A' - '0' - 10) - Bool(*a\c >= 'a') * ('a' - 'A')
*b\c - '0' - Bool(*b\c >= 'A') * ('A' - '0' - 10) - Bool(*b\c >= 'a') * ('a' - 'A')
*a\c ! *b\c
*a\c + '0' + Bool(*a\c > 9) * ('a' - '0' - 10)
*a + SizeOf(Character)
*b + SizeOf(CHaracter)
Wend
ProcedureReturn a
EndProcedure
Procedure.s XOrHexString2(a.s, b.s)
Protected i.i = 1, size.i = Len(a), result.s = ""
If size <> Len(b)
ProcedureReturn ""
EndIf
While size >= 8
result + RSet(Hex(Val("$" + Mid(a, i, 8)) ! Val("$" + Mid(b, i, 8)), #PB_Long), 8, "0")
i + 8
size - 8
Wend
While size
result + Hex(Val("$" + Mid(a, i, 1)) ! Val("$" + Mid(b, i, 1)), #PB_Long)
i + 1
size - 1
Wend
ProcedureReturn result
EndProcedure
Procedure.s xorhexstring3(a.s,b.s)
ProcedureReturn Hex(Val("$"+a) ! Val("$"+b))
EndProcedure
Procedure.s xorhexstring4(a.s,b.s)
Protected ret.s=Space(Len(a))
Protected *achar.character=@a.s
Protected *bchar.character=@b.s
Protected *retchar.character=@ret
While *achar\c>0
*retchar\c=HexTable((HexTable(*achar\c&$7f)) ! (HexTable(*bchar\c&$7f)))
*achar+SizeOf(character)
*bchar+SizeOf(character)
*retchar+SizeOf(character)
Wend
ProcedureReturn ret
EndProcedure
Procedure xorhexstring5(*retchar.character,*achar.character,*bchar.character)
Protected value
While *achar\c>0
*retchar\c=HexTable((HexTable(*achar\c&$7f)) ! (HexTable(*bchar\c&$7f)))
*achar+SizeOf(character)
*bchar+SizeOf(character)
*retchar+SizeOf(character)
Wend
EndProcedure
Define ret.s
Define t.i
Define i
OpenConsole()
Macro quote
"
EndMacro
Macro test(aaa)
PrintN(quote#aaa#quote)
t=ElapsedMilliseconds()
For i=0 To 1000000
ret= aaa("123456789", "abcdef019")
Next
PrintN( ret)
PrintN(Str(ElapsedMilliseconds()-t))
EndMacro
test(XOrHexString)
test(XOrHexString2)
test(xorhexstring3)
test(xorhexstring4)
PrintN(quote#aaa#quote)
t=ElapsedMilliseconds()
Define a$="123456789",b$="abcdef019",ret$="---------"
For i=0 To 1000000
xorhexstring5(@ret$,@a$,@b$)
Next
PrintN( ret$)
PrintN(Str(ElapsedMilliseconds()-t))
Input()
Code: Alles auswählen
XOrHexString
b9f9b9790
290
XOrHexString2
B9F9B9790
696
xorhexstring3
B9F9B9790
324
xorhexstring4
B9F9B9790
324
aaa
B9F9B9790
34
Code: Alles auswählen
Bench without Pepperlist and Compare
1 Iterations in 0 ms | Hash: ACEBEA01B37D148AA54D42208AC4229D06C591F6CA1DB3940ED9B3E702588274.9u774E8V
2 Iterations in 0 ms | Hash: 6E17CF4FDAB0CDA6EBF34DC5DF57814D44057787D0E7C22EFA2C01F74CE79B09.jjRm1P07
4 Iterations in 0 ms | Hash: 8F9C38BE9968E4538EA4D13AF3F7CA47E9411DB92DE858CA19EE1B8BA6937BEE.Tfk3631x
8 Iterations in 0 ms | Hash: 63D299F598BEABE0F19CD10F71916EFCE5A15F0D0F524079C42DF352525D1236.QeGyrZNJ
16 Iterations in 0 ms | Hash: DB1997E5E66811B5B23DDA9E4B5D9E3F230BDB580D512A3A20104C9D94FA82F8.9y9ClZEt
32 Iterations in 1 ms | Hash: FD4532FEEBF3425D740B6E996197764662DD4F4F0CAEDDBA06EA7412C409210E.UTvBclOo
64 Iterations in 0 ms | Hash: C40E407630F00FBD9CB9188319CF955EF205ADDA7C7B34E30B80E99EE3DC5026.41b4V253
128 Iterations in 1 ms | Hash: 71AA81F2EA16796DEF932E6699217C6456171AC4AD99E98A8734050201606D4A.yD4h55TW
256 Iterations in 1 ms | Hash: F91B3B2A65213F70BF55BDDF3ACA094995EE08D1377BA783592130C7FA16E6E2.uIz3oW4G
512 Iterations in 2 ms | Hash: B08B70BBBB61FB1ED37D0F9BE0CB1BE4F67F739B0EEAFC68A2CB769F7352CE8B.utU76EOH
1024 Iterations in 5 ms | Hash: 34AA3FD4EAB9379A4272AF7C14A65FC518F1F5141E9065F5B3F0209F0DA6CA01.HH64ZwmU
2048 Iterations in 9 ms | Hash: 2D2D8D098CAA933B8890EB3480391E0FE47FE132A763F4542B1859C11962AB5C.r2s4de9t
4096 Iterations in 18 ms | Hash: 6D8B02C0BBC67A21AA8702CB0AC9943BEAA85E398710B6BC0D841E2E0F4DF359.7GWf7r00
8192 Iterations in 36 ms | Hash: B1EDE54C3A83A99084EB006F55767EC08C1ABD6E4900193CB821AC5708D55686.WxR3pe1U
16384 Iterations in 72 ms | Hash: 1B90D21193FA7459858CDEBDF4558EE3BE668AB263073F4EB61552C0C44C051C.8h1UH899
32768 Iterations in 144 ms | Hash: 5284DEB6C5C1CAEDD076719235F65405EDFC844780C0B10F1252C730FD3B8F28.MmJUpXj6
65536 Iterations in 288 ms | Hash: 00B2045E8B0D34FD1038B523DD98E86DAA6A0B9DA7D51F738FE4C4838CE7E725.9607luYb
131072 Iterations in 576 ms | Hash: 2A2000B1BC2B6DD115ACA9BD38076800E5F467B3E1A47F389E4B69682BE3BD24.5x0uXBmF
262144 Iterations in 1153 ms | Hash: 8624AE3725850C01720B71B75AB2780CC2DBEAB5DB622BCD669FA9F193C0F9C6.n882RQoQ
524288 Iterations in 2309 ms | Hash: C131812DAB8A60195C825646FAFB024534B159DF7C720F9B649438B8975298FF.x9t03aA9
1048576 Iterations in 4620 ms | Hash: 0974E4B867B058BE3195155538F14DA7F01DE10F5CD66A4CB96C0C4383A90FC4.Uo1xEL88
2097152 Iterations in 9235 ms | Hash: AC403D831AB2F1089CAEAEF8CA290F07B08AF1B2B01F7C551BBCE1B3742D1696.XWgUITJg
4194304 Iterations in 18490 ms | Hash: 39026863C9882C574F39C2C3EA7C4F6A13B341D14043B1980462960427D0DBA1.z78tKVZ8
8388608 Iterations in 36998 ms | Hash: 05FFB297E13870FBAACEFD102729950374A8A7DF4D02A78943BC87443D49D602.mzIX23L0
16777216 Iterations in 74002 ms | Hash: 93585A855EEB97778EDC86211A9D76EC5123080B9E07EB9F6A651DCDD9CBFE68.59289aq7
Code: Alles auswählen
XOrHexString
b9f9b9790b9f9b9790b9f9b9790b9f9b9790
660
XOrHexString2
B9F9B9790B9F9B9790B9F9B9790B9F9B9790
2526
xorhexstring3
F9B9790B9F9B9790
513
xorhexstring4
B9F9B9790B9F9B9790B9F9B9790B9F9B9790
579
aaa
B9F9B9790B9F9B9790B9F9B9790B9F9B9790
126