Seite 3 von 4
Re: XOR und Strings
Verfasst: 11.11.2015 19:47
von TroaX
GPI hat geschrieben:@TroaX
Zeile 38 ist "hashedstring = StringFingerprint(hashedstring + Str(x),#PB_Cipher_SHA3,shadepth)" - da ist kein XOR...
Das ist ja auch nicht die geänderte Fassung. Die ist schon ein paar Tage unverändert auf dem Server. Aber die Zeile ist richtig. IN meiner aktuellen steht da das drin:
Code: Alles auswählen
hashedstring = XOrHexString(hashedstring, StringFingerprint(hashedstring,#PB_Cipher_SHA2,shadepth))
HINWEIS: Unbedingt den Hash-Algo dort auf SHA3 ändern
EDIT:
Also deine Methode 4 mit SHA2 256-Bit:
Code: Alles auswählen
Bench without Pepperlist and Compare
1 Iterations in 0 ms | Hash: 1B9AA88E0A78B7D4DDB4FB9D18E4712784BF204EED16FB64A5FEE250122A4985.6Z7ALqJe
2 Iterations in 0 ms | Hash: 619B54A22D131E38E110F949C1E889F62DDD57A60BFB2AFC87F31C947E8A0B89.qf9f0qzF
4 Iterations in 0 ms | Hash: 38CA434325EF297A41240FDD87B15023196AD1931A958D72F21494F4D3C7D5EA.ukPTdOGY
8 Iterations in 0 ms | Hash: 273273D552D41AECA58DD6F4076431ED505C7880715081119FD28548AE968F30.9l7mA7JA
16 Iterations in 0 ms | Hash: EA48EE123EA29CCB063DFF13B8CA88892C92C155D1AEFCE88A45CF8573D5C1AF.HICxfu4K
32 Iterations in 0 ms | Hash: 8111198FB3DEF5AF1BC6A23A28B66B340F19B6F2F0E75E82220421359E4EF636.1nIizZ4E
64 Iterations in 1 ms | Hash: 35E6C85B7AD2B235235E8D371F89375A5084B814E318FE700AA264DE14F2FA03.D9q22Z5j
128 Iterations in 0 ms | Hash: 0B9D8B060CB60A463ADCDF27EBF1AEBBBAE43A2FDB2B30103F68406739A3B945.TR5e7oM8
256 Iterations in 1 ms | Hash: 0C22A902C22DBAC36BADF91613A6F9174506FBB550C1F59149856C05165F827E.90TJ6oD3
512 Iterations in 1 ms | Hash: 56DAF1FF00B877D29F6711A241F3A86A145A869FD7BA4BC1B372D16A11CF8094.nIwFlW5h
1024 Iterations in 2 ms | Hash: A40AD3176BE1BFBB4963D867CFBC181AC5E1CBB6FF3E7F9291B4FB69A1DE3AC0.sSC9c833
2048 Iterations in 5 ms | Hash: D1A93E33E18236BC40E9CD0B3D892D5C69BB2B54977569AFD97DDE7DBD809252.EHk882TR
4096 Iterations in 9 ms | Hash: 362AA648E2D3A35128F924647686C2079C82BD9C330D8F22415546AFACF3735B.K2snO2OT
8192 Iterations in 18 ms | Hash: 7C7EAFF5813AD1848F969847DA345C0810E1756EF07F9DDA86D968B204E45529.B1IvrS1f
16384 Iterations in 37 ms | Hash: 74054ECE21630110795A76EEF109167BF9A732B99D0A1C3F859A3269B693D590.V3HpeL0Z
32768 Iterations in 74 ms | Hash: 4E4D62681ABAE72974A4FF15DE0ACBC0AF3CAC973C6DF6CF5B5E9B8C2B950CAA.1N9Ur4hv
65536 Iterations in 148 ms | Hash: 0F23AF81712D4FB011B40DE59C973395293BD591E41C4A0437551DEC0DDBB4C3.v7rXAed6
131072 Iterations in 298 ms | Hash: 1432CAC27C70D7AAFAC3053D97EF6DB940C9EE8796EA6D40B9AC09776E65CF6D.0bM2w7Lk
262144 Iterations in 597 ms | Hash: F5D71E0729B2530FD5A2248A3DBE85D08F33A92DE2AD6526246C096378DF72BC.dS6jurcM
524288 Iterations in 1185 ms | Hash: B3E6FD1891725118CAF8D46089F99025285DB182EF77AE485F2761CAF7F78661.kYQ53MXo
1048576 Iterations in 2377 ms | Hash: DA189E0F9FF866A445D242EECB54003BA88CD8BC1D605A3552EB27F461D26955.J8DrG74v
2097152 Iterations in 4747 ms | Hash: 10DA9C3C8F20292CA4DE6DA45A411C8F2C30CB61F361613E0E0B799041FB4362.0KITNbPv
4194304 Iterations in 9495 ms | Hash: 4604CF9EBAE3033C53E3ABAD87C7421B0217C2C33BC05E61BD83ABF57578D8BE.Tc22t9ZY
8388608 Iterations in 18985 ms | Hash: 167CCC89935DF984132D7C4FBDD25CEA3FACF6C01289FF3068E45177FAA5F32F.7Da90Ez5
16777216 Iterations in 37994 ms | Hash: 9C587E044FBDCEFEB03373A7F680311053A6344EA3063EDA04E6B8CE86C97E9C.9163H0pO
Nochmals deutlich schneller

Re: XOR und Strings
Verfasst: 11.11.2015 20:10
von GPI
Methode 5 ist es, die du willst

Dazu muss man aber wohl ein bischen mehr ändern. Dann dürfte gut der Faktor 5 drin sein, die die xor-funktion schneller ist. Generell dürften ein paar sachen schneller werden.
Re: XOR und Strings
Verfasst: 11.11.2015 20:15
von TroaX
GPI hat geschrieben:Methode 5 ist es, die du willst

Dazu muss man aber wohl ein bischen mehr ändern. Dann dürfte gut der Faktor 5 drin sein, die die xor-funktion schneller ist. Generell dürften ein paar sachen schneller werden.
Und wie ich die will. Getestet und eingetütet:
Code: Alles auswählen
Bench without Pepperlist and Compare
1 Iterations in 0 ms | Hash: 359438B5E44679DE00173381F121E19DB5B687C7A990F34D1CF4CFC6824E331F.m91FjE1d
2 Iterations in 0 ms | Hash: 77087C2C32DBBDBCFF0C318B090271F98BD57357D68E28FB7B3F1953311B111A.yB0Kwaak
4 Iterations in 0 ms | Hash: A63911E80AC123F7589A5D26D6E1D6EA7EC9845E355944646CA924A2C7E26E61.QZfAiYbQ
8 Iterations in 0 ms | Hash: 7B86A637E32C489B4D286A2092DC9FA801C04E67D269D345C4394243774E6866.j9RaSl3O
16 Iterations in 0 ms | Hash: 4A11103E10F3D3A23D95B4E68A9047527B9306C4C075D0C1AC17B568CD31EB5D.k0q58AlO
32 Iterations in 0 ms | Hash: E6B10B293642C99D81F0DC5957B1A5EA9191A858B633CE299ECF42EA47844FCD.MUhK87YT
64 Iterations in 0 ms | Hash: 5742F544B576504862BFB80C62F8987B7CB831054AB164DEE160E2CBC93C5C0D.l6u23Sv1
128 Iterations in 0 ms | Hash: D32135E86822DB8FFE80428468EEBDCB0FD57FF636A023FF0DF6098265AF28C7.ou2L3HMh
256 Iterations in 1 ms | Hash: 7530075A23908B794888E5303AA31CD496D831AC8A7F174C1D8E6FEE973563D2.nvn3p3Pd
512 Iterations in 1 ms | Hash: C37D63FBA61A20A8C8FEF259F3142B05B912FEA2B8B07906256E98C55D5AA183.Ir5WQ276
1024 Iterations in 2 ms | Hash: 564889379B696DB0024B61C78805F8548E3ABB022991931334F0D54474C042B0.vD176gbZ
2048 Iterations in 3 ms | Hash: 98D0389E2129F2E44D8933FE0670DEE471637F5E3B987704A956091B386C81CA.C7OKSJ35
4096 Iterations in 7 ms | Hash: F82579A758022BBD1765D6805B72E045946E00AEE95C55976780E66444190665.DjElcbmb
8192 Iterations in 14 ms | Hash: 8847B25C5CA3A0ACA13DB76CCD156989D3989C983371283FD69549A4EE55CA92.nvlU7fN7
16384 Iterations in 27 ms | Hash: FE5570982F897BE7403F3406FEAF3D532F02F6A0CB13661A83281005F46B8A28.w2g2KID3
32768 Iterations in 55 ms | Hash: DF3ACA69433B6BA8840E2078942C2394A22D26762B68F263AD2803D831765EB5.2FkF3AM1
65536 Iterations in 109 ms | Hash: BC6C3CBFA885786E379C89B84DDD845BC0A6CAA994BEC8B93419526A1E79D193.493618F0
131072 Iterations in 218 ms | Hash: 3AC13E33156ABAB1803E2E6F90A1DDDB4F8BAB514A63B039B8A603BC270075A4.qOhHN498
262144 Iterations in 435 ms | Hash: 9CBC793467EA3EA0143033AE6F6969F51B3493E420485697938A23F90856FACD.JpC5v115
524288 Iterations in 870 ms | Hash: 0EA2999D1038D743E7C9D0C19804E7B4694CB480BF3634695B04C8201A1A8C71.Iyii1b7q
1048576 Iterations in 1741 ms | Hash: 54080C8E8777725F80DA5F79EC2BE636757032E6DDE81A00FFF8628C7CAA9664.42H3WRrZ
2097152 Iterations in 3484 ms | Hash: 2D1FDD1582996DE508671A409EE05087229DD61F66B35E5D8A94A7D6F73E911A.X60le382
4194304 Iterations in 6973 ms | Hash: 8EB811D8DBDCFBCD652AF5C3E4D6EF44831D0A4002D2B519BAB84AF8D79F9602.SeKX58Eu
8388608 Iterations in 13950 ms | Hash: 37819A5498493219D6A3F73317156B42864D75573E490DFAEC928C5CD681C0AE.9h51Q82W
16777216 Iterations in 27970 ms | Hash: 91F606827C7E4EA49CD2441850019A1F8EC7A48EE7DB2C1667ECE9836894950D.RIfPLvP1
Der Hammer! Vielen dank! Und so viel musste ich nicht einmal ändern:
Code: Alles auswählen
substring = StringFingerprint(hashedstring,#PB_Cipher_SHA2,shadepth)
xorhexstring5(@hashedstring, @hashedstring, @substring)
Nun habe ich endlich eine vernünftige Hashfunktion für Passwörter. Nur noch schick machen und alles ist schön
NACHTRAG: Habe die Methode auch noch einmal mit SHA3 512-Bit getestet. Sie ist auch schneller als die erste Version ohne XOR. Perfekt! Nochmals vielen vielen Dank

Re: XOR und Strings
Verfasst: 11.11.2015 20:20
von GPI
Wenn du weiter optimieren willst - wie gesagt, vermeide procedure.s und Strings als parameter. Als rückgabestring kannst du auch einen globalen String verwenden. Das könnte die Geschwindigkeit nochmals gewaltig erhöhen.
Wenn man einen String als Parameter übergibt, muss dieser immer erst umständlich kopiert werden. Genauso wenn man einen String zurückgibt. Das macht das ganze so dermaßen langsam.
Re: XOR und Strings
Verfasst: 12.11.2015 12:07
von TroaX
Noch eine kleine Frage. Mir ist eben aufgefallen, das der RAM-Verbrauch beim iterieren exorbitant in die Höhe geht. Bei rund 1,6 GB hat der Bürorechner hier die Biege gemacht. Habe herausgefunden, das StringFingerprint bei jedem Aufruf im Speicher bleibt. Wenn ich stattdessen nur Fingerprint nehme, läuft es ohne Anstieg durch. Nur dort muss man mit einem Puffer arbeiten. Ich bekomme es nicht hin, das der String im Puffer das selbe Ergebnis ausspuckt wie als wenn ich StringFingerprint verwende.
Muss man da etwas bestimmtes beachten? Ich habe schon versucht, die Größe des Speichers an den String anzupassen. Allerdings reicht das nicht. Stehe etwas auf dem Schlauch:
Code: Alles auswählen
Define hashedstring.s
Define *prestring = AllocateMemory(1024)
PokeS(*prestring, pwstring)
hashedstring = Fingerprint(*prestring, 1024, #PB_Cipher_SHA3,shadepth)
PrintN("Memoryhash: " + hashedstring)
PrintN("Direct Hash: " + StringFingerprint(pwstring, #PB_Cipher_SHA3, shadepth))
Ein Tip wäre super

Re: XOR und Strings
Verfasst: 12.11.2015 13:01
von GPI
klingt eher nach einen Bug von StringFingerprint...
Re: XOR und Strings
Verfasst: 12.11.2015 13:16
von TroaX
GPI hat geschrieben:klingt eher nach einen Bug von StringFingerprint...
Ich denke auch. Denn nutze ich nur Fingerprint, ist der RAM-Verbrauch nie über 12 MB. Die Ergebnisse weichen nur eben ab. Aber bei StringFingerprint grundsätzlich immer weiter steigend, bis hier das System bei fast 2 GB ausgestiegen ist. Und dabei ist der Algo egal. MD5, SHA1, SHA2 und SHA3 getestet. Überall das gleiche Bild. Nur wenn Fingerprint keine gleichwertigen Daten liefert, dann kann es sein, das sogar die Routine einfacher Brechbar ist. Und das möchte ich nicht für eine Passwortfunktion haben.
Re: XOR und Strings
Verfasst: 12.11.2015 13:26
von GPI
Vergiss nicht in englischen Forum ein Bug-Report zu liefern

Re: XOR und Strings
Verfasst: 12.11.2015 13:38
von NicTheQuick
So geht's richtig:
Code: Alles auswählen
UseSHA3Fingerprint()
Define input.s = "Hello Cipher"
Debug "StringFingerprint: " + StringFingerprint(input, #PB_Cipher_SHA3)
*buffer = AllocateMemory(Len(input) * 4)
bytes = PokeS(*buffer, input, -1, #PB_UTF8)
Debug "FingerPrint: " + Fingerprint(*buffer, bytes, #PB_Cipher_SHA3)
FreeMemory(*buffer)
Wenn du bei StringFingerPrint allerdings #PB_Ascii oder #PB_Unicode nutzt, dann musst du das bei PokeS natürlich auch machen. Ich alloziere übrigens extra 4 mal so viel Speicher bei AllocateMemory, weil ein UTF8-Zeichen maximal 4 Bytes lang sein kann. Sicher ist sicher.

Re: XOR und Strings
Verfasst: 12.11.2015 13:43
von TroaX
NicTheQuick hat geschrieben:So geht's richtig:
Code: Alles auswählen
UseSHA3Fingerprint()
Define input.s = "Hello Cipher"
Debug "StringFingerprint: " + StringFingerprint(input, #PB_Cipher_SHA3)
*buffer = AllocateMemory(Len(input) * 4)
bytes = PokeS(*buffer, input, -1, #PB_UTF8)
Debug "FingerPrint: " + Fingerprint(*buffer, bytes, #PB_Cipher_SHA3)
FreeMemory(*buffer)
Wenn du bei StringFingerPrint allerdings #PB_Ascii oder #PB_Unicode nutzt, dann musst du das bei PokeS natürlich auch machen. Ich alloziere übrigens extra 4 mal so viel Speicher bei AllocateMemory, weil ein UTF8-Zeichen maximal 4 Bytes lang sein kann. Sicher ist sicher.

Achsoooo ok .... Vielen Dank. Das kommt davon, wenn man nie mit Pointern und Speicherbereichen arbeitet. Schande über mein Haupt
EDIT: Das 4-fache reichte bei mir nicht. Mit *4 habe ich imemr einen ungültigen Speicherzugriff. Habe es mal mit 8 getestet. Damit klappt das in Verbindung mit UTF8.
GPI hat geschrieben:Vergiss nicht in englischen Forum ein Bug-Report zu liefern

Ich versuchs nachher. Aber ich verspreche nicht, das es jeder versteht. Mein Englisch ist unter aller Sau!
