[Request] Brute-Force algorithmus
Übersicht

TheGamePopeBetreff: [Request] Brute-Force algorithmus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute.
Ich wollte mal fragen, ob mir irgendjemand einen schnellen bruteforce algorithmus geben kann, der nicht so aussieht: Code: [AUSKLAPPEN] Global charset$[] = "a", "b", ...
Global brutestring$ For a$ = eachIn charset For b$ = EachIn charset 'Für mehr entsprechend viele for loops hinzufügen brutestring = a + b next next Gibts da noch ne andere möglichkeit? |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was genau willst du machen?
Alle möglichen Kombinationen im String enthaltenen Zeichen als Permutationsmenge ausgeben? MfG (hör sich einer das an o.o" uni schädigt -___-) |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
yo uni schädigt echt... da denkst du dir einfach wörter wie permutationsmenge aus! ^^
sowas gibts nich ![]() und was er will ist einfach jede möglichkeit von strings der länge n in dem fall ist n = 2 es gibt viele möglichkeiten die verhindern dass du hier tausende von schleifen ineinander basteln musst da das ganze aber nach nem bruteforce passwort rausfind algo aussieht werd ich dir ma nich helfen. das musste schon alleine hinkriegen, sorry es sei denn du kannst mir sagen was du damit machen willst.. |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh wir sind heut wieder kleinlich ![]() So nebenbei: Man kann Permutationen als Menge darstellen... Also wenns geht, bitte nicht auf mich einhauen, das macht mich traurig -___- Und außerdem meinen wir das selbe^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
war doch gar net bös gemeint^^
und ja stimmt wir meinen das gleiche, dachte zuerst du meinst was anderes - aber im prinzip nich ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nutze Rekursion für dein Vorhaben, GamePope. Aber erwarte nicht dass wir dir deine Programme schreiben, schon gar nicht wenn sie einem zweifelhaften Zweck dienen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also. Ich weis nich ob ihr das als böse ansieht, aber ich habe einfach aus spaß vor, md5 tabellen zu generieren. War nur also übung gedacht. Den code hab ich inzwischen.
@BladeRunner Mir is klar das ihr meine programme nich schreibt. Bin ja nich blöd. Inzwischen hab ich den algorithmus gefunden. |
||
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut also ich hab das program jetzt fertig.
Allerdings hab ich eine frage. Ich hab das ganze jetzt schon in threads ausgelagert (siehe code) aber es nutzt immer noch nur einen von vire rechenkernen. Was kann ich da machen, das das programm alle ausnutzt? (Md5.bmx ist die blitzmax konvertierung von Craig Kiesau's BlitzBasic MD5-algorithmus) Code: [AUSKLAPPEN] Include "Md5.bmx" Global charset:String[]=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] Global word_length:Int=5 Global writing:Byte = False Global outMd5File:TStream=WriteFile("Table1.Md5") Global outNamFile:TStream=WriteFile("Table1.Nam") Global outNamLenFile:TStream=WriteFile("Table1.Nam.Len") thread:TMap = New TMap Print "We'll generate "+GetNums(word_length, charset.length)+" strings" For I3=0 To word_length-1 Delay 5 MapInsert(thread,String(I3),CreateThread(Brute, String(I3))) Next Local allDone:Byte = False While Not allDone running:Byte = False For o:Object = EachIn MapValues(thread) t:TThread = TThread(o) If (t.Running()) running = True EndIf Next If (Not running) allDone = True EndIf Delay 10 Wend CloseStream(outMd5File) CloseStream(outNamFile) CloseStream(outNamLenFile) Function Brute:Object(Data:Object) _len = Int(Data.ToString()) Print "Starting run "+(_len+1)+" of "+word_length Print "Thread has to do "+long((_len+1)^charset.length+charset.length-1)+" strings" Local word:Int[] = New Int[_len+2] For I2=0 To _len+1 word[I2] = 0 Next Local wort$ Repeat wort$="" For I2=0 To _len wort$=wort$+charset[word[I2]] Next wort$ = Reverse(wort) While writing Delay 10 Wend writing = True outMd5File.WriteString(Md5(wort)) outNamFile.WriteString(wort) outNamLenFile.WriteInt(Len(wort)) writing = False word[0]=word[0]+1 For I2=0 To _len If word[I2]>charset.length-1 Then word[I2]=0 word[I2+1]=word[I2+1]+1 EndIf Next Until word[_len+1]=1 Print "Run "+(_len+1)+" of "+word_length+" done" End Function Function Reverse$(_msg$) _response$ = "" For a=1 To Len(_msg$) _response$ = _response$ + Left(Right(_msg$,a),1) Next Return _response End Function Function GetNums(exp1, exp2) result = 0 For a=1 To exp1 result = result + a^exp2 Next End Function |
||
- Zuletzt bearbeitet von TheGamePope am Sa, Jul 24, 2010 15:19, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne deine Frage direkt beantworten zu können, da der Code als solches ohne die Include ja nicht lauffähig ist, mehrere Anmerkungen/Fragen:
1. Warum all diese delays in deinem Code? 2. Warum speicherst Du deine Einträge in einer Map, wenn du doch nie explitit per Key auf eines deiner Objekte zugreifen willst? 3. Dein Code ist nicht Threadsafe! Du benutzt aus deinen Threads heraus Writestring etc., welche für sich nicht threadsafe sind. Bevor Du einen Thread was in die Datei eintragen lässt musst Du den Schreibzugriff sichern, denn ansonsten hast Du später nur Datenmüll in deinem File, weil die Threads kunterbunt durcheinander wursteln. Schau dir dazu TMutex an. 4. Um die Performance zu steigern solltest du auf basickonforme Dinge wie die Stringfunktionen verzichten und stattdessen mit Slices arbeiten. 5.Code: [AUSKLAPPEN] While writing
Writing wird vorher in der Funktion nie benutzt und kann daher nur false sein. Threads teilen sich den Variablenraum nicht Delay 10 Wend '??? ![]() 6. Gewöhn dir Programmieren mit Strict, besser noch mit Superstrict an, dann passieren solche Scopefehler nicht mehr, weil der Compiler meckert. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Die delays am anfang sind einfach nur da, das das print gescheit funktioniert.
2. TThread lässt sich nicht als Arry benutzen und TList is auch nich schneller 3. Hatte eigentlich gedacht das ich durch die globale variable writing zu sichern. Werds mit ner Mutex machen 4. Muss ich noch lernen ![]() 5. Siehe 3. War dafür gedacht, das während des schreibzugrifs niemand anders versucht darauf zuzugreifen 6. Werd ich machen 7. Und wie lager ich das jetzt auf mehrere Kerne aus? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
- Local arr:TThread[20] funktioniert hier bei mir ohne Probleme. Und TList wäre im aktuellen Fall sicher schneller als die TMap, weil es den Folgelink immer mit sich führt ![]() - Die Globale hab ich übersehen, insgesamt ist es aber sowieso günstiger den Gebrauch von Globalen zu vermeiden wo es geht. - Die Threads sollten, wenn sie wirklich parallel laufen, automatisch von deinem OS auf die einzelnen Kerne verteilt werden. Wenn das nicht geschieht werden entweder nicht parallel Threads erstellt (Delay sei dank? - Wir bremsen das Programm so lange bis alle anderen Threads fertig sind - nur eine Vermutung) oder Du hast sonst einen Fehler im Code, was sich mir aber ohne lauffähiges Beispiel nicht erschliesst. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So. Hab jetzt mal nen grosteil von dem was du meintest verbessert und werd dieses mal auch die Md5.bmx dazu tun. Auslagerung is jetzt besser, nutzt aber nur 30% von 4x2,4 ghz aus. SuperStrict / Strict hab ich hier jetzt nicht angewendet, da das auch bei der Md5 routine rummeckert.
Code: [AUSKLAPPEN] Include "Md5.bmx"
Global charset:String[]=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] Global word_length:Int=6 Global writing:TMutex = CreateMutex() Global outMd5File:TStream=WriteFile("Table1.Md5") Global outNamFile:TStream=WriteFile("Table1.Nam") Global outNamLenFile:TStream=WriteFile("Table1.Nam.Len") Local thread:TThread[] = New TThread[word_length] Print "We'll generate "+GetNums(word_length, charset.length)+" strings" For I3=0 To word_length-1 thread[I3] = CreateThread(Brute, String(I3)) Next Local allDone:Byte = False While Not allDone running:Byte = False For t:TThread = EachIn thread If (t.Running()) running = True EndIf Next If (Not running) allDone = True EndIf Delay 10 Wend CloseStream(outMd5File) CloseStream(outNamFile) CloseStream(outNamLenFile) Function Brute:Object(Data:Object) _len = Int(Data.ToString()) Print "Starting run "+(_len+1)+" of "+word_length Print "Thread has to do "+Long((_len+1)^charset.length+charset.length-1)+" strings" Local word:Int[] = New Int[_len+2] For I2=0 To _len+1 word[I2] = 0 Next Local wort$ Repeat wort$="" For I2=0 To _len wort$=wort$+charset[word[I2]] Next wort$ = Reverse(wort) LockMutex(writing) outMd5File.WriteString(Md5(wort)) outNamFile.WriteString(wort) outNamLenFile.WriteInt(Len(wort)) UnlockMutex(writing) word[0]=word[0]+1 For I2=0 To _len If word[I2]>charset.length-1 Then word[I2]=0 word[I2+1]=word[I2+1]+1 EndIf Next Until word[_len+1]=1 Print "Run "+(_len+1)+" of "+word_length+" done" End Function Function Reverse$(_msg$) _response$ = "" For a=1 To Len(_msg$) _response$ = _response$ + Left(Right(_msg$,a),1) Next Return _response End Function Function GetNums:Long(exp1, exp2) result:Long = 0 For a=1 To exp1 result = result + a^exp2 Next Return result End Function Md5.bmx Code: [AUSKLAPPEN] Global MD5_x[]
'MD5 for BlitzMax 'Derived from Craig Kiesau's BlitzBasic MD5 function 'Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm Function MD5$(sMessage$) 'Pads the String as per the MD5 standard nblk = ((Len(sMessage$) + 8) Shr 6) + 1 'number of 16-word blocks Local MD5_x[(nblk * 16)] 'Zero pad the String For i = 0 To nblk * 16 - 1 MD5_x[i] = 0 Next 'Convert To array of "words" For i = 0 To (Len(sMessage$) - 1) MD5_x[(i Shr 2)] = MD5_x[(i Shr 2)] | (Asc(Mid(sMessage$, (i + 1), 1)) Shl ((i Mod 4) * 8)) Next MD5_x[(i Shr 2)] = MD5_x[(i Shr 2)] | (128 Shl (((i) Mod 4) * 8)) MD5_x[nblk * 16 - 2] = Len(sMessage$) * 8 'Set initial values MD5_a = 1732584193 '&H67452301 MD5_b = -271733879 '&HEFCDAB89 MD5_c = -1732584194 '&H98BADCFE MD5_d = 271733878 '&H10325476 'Loop through the words For k = 0 To (nblk * 16 - 1) Step 16 MD5_AA = MD5_a MD5_BB = MD5_b MD5_CC = MD5_c MD5_DD = MD5_d 'Round 1 MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 0], 7, -680876936) '&HD76AA478 MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 1], 12, -389564586) '&HE8C7B756 MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 2], 17, 606105819 )'&H242070DB MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 3], 22, -1044525330) '&HC1BDCEEE MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 4], 7, -176418897) '&HF57C0FAF MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 5], 12, 1200080426 )'&H4787C62A MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 6], 17, -1473231341) '&HA8304613 MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 7], 22, -45705983) '&HFD469501 MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 8], 7, 1770035416) '&H698098D8 MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 9], 12, -1958414417 )'&H8B44F7AF MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 10], 17, -42063 )'&HFFFF5BB1 MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 11], 22, -1990404162) '&H895CD7BE MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 12], 7, 1804603682) '&H6B901122 MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 13], 12, -40341101) '&HFD987193 MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 14], 17, -1502002290) '&HA679438E MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 15], 22, 1236535329) '&H49B40821 'Round 2 MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 1], 5, -165796510) '&HF61E2562 MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 6], 9, -1069501632) '&HC040B340 MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 11], 14, 643717713) '&H265E5A51 MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 0], 20, -373897302) '&HE9B6C7AA MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 5], 5, -701558691) '&HD62F105D MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 10], 9, 38016083) '&H2441453 MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 15], 14, -660478335) '&HD8A1E681 MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 4], 20, -405537848) '&HE7D3FBC8 MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 9], 5, 568446438) '&H21E1CDE6 MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 14], 9, -1019803690) '&HC33707D6 MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 3], 14, -187363961) '&HF4D50D87 MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 8], 20, 1163531501) '&H455A14ED MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 13], 5, -1444681467) '&HA9E3E905 MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 2], 9, -51403784) '&HFCEFA3F8 MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 7], 14, 1735328473) '&H676F02D9 MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 12], 20, -1926607734) '&H8D2A4C8A 'Round 3 MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 5], 4, -378558) '&HFFFA3942 MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 8], 11, -2022574463) '&H8771F681 MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 11], 16, 1839030562) '&H6D9D6122 MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 14], 23, -35309556) '&HFDE5380C MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 1], 4, -1530992060) '&HA4BEEA44 MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 4], 11, 1272893353) '&H4BDECFA9 MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 7], 16, -155497632) '&HF6BB4B60 MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 10], 23, -1094730640) '&HBEBFBC70 MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 13], 4, 681279174) '&H289B7EC6 MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 0], 11, -358537222) '&HEAA127FA MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 3], 16, -722521979) '&HD4EF3085 MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 6], 23, 76029189) '&H4881D05 MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 9], 4, -640364487) '&HD9D4D039 MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 12], 11, -421815835) '&HE6DB99E5 MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 15], 16, 530742520) '&H1FA27CF8 MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 2], 23, -995338651) '&HC4AC5665 'Round 4 MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 0], 6, -198630844) '&HF4292244 MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 7], 10, 1126891415) '&H432AFF97 MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 14], 15, -1416354905) '&HAB9423A7 MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 5], 21, -57434055) '&HFC93A039 MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 12], 6, 1700485571) '&H655B59C3 MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 3], 10, -1894986606) '&H8F0CCC92 MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 10], 15, -1051523) '&HFFEFF47D MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 1], 21, -2054922799) '&H85845DD1 MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 8], 6, 1873313359) '&H6FA87E4F MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 15], 10, -30611744) '&HFE2CE6E0 MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 6], 15, -1560198380 )'&HA3014314 MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 13], 21, 1309151649) '&H4E0811A1 MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 4], 6, -145523070) '&HF7537E82 MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 11], 10, -1120210379) '&HBD3AF235 MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 2], 15, 718787259) '&H2AD7D2BB MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 9], 21, -343485551) '&HEB86D391 MD5_a = MD5_a + MD5_AA MD5_b = MD5_b + MD5_BB MD5_c = MD5_c + MD5_CC MD5_d = MD5_d + MD5_DD Next Return Upper(WordToHex$(MD5_a) + WordToHex$(MD5_b) + WordToHex$(MD5_c) + WordToHex$(MD5_d)) End Function Function MD5_F(x, y, z) Return ((x & y) | (~(x) & z)) End Function Function MD5_G(x, y, z) Return ((x & z) | (y & (~(z)))) End Function Function MD5_H(x, y, z) Return (x ~ y ~ z) End Function Function MD5_I(x, y, z) Return (y ~ (x | (~z))) End Function Function MD5_FF(a, b, c, d, x, s, ac) a = (a + ((MD5_F(b, c, d)+ x)+ ac)) a = RotateLeft(a, s) Return a + b End Function Function MD5_GG(a, b, c, d, x, s, ac) a = (a + ((MD5_G(b, c, d) + x) + ac)) a = RotateLeft(a, s) Return a + b End Function Function MD5_HH(a, b, c, d, x, s, ac) a = (a + ((MD5_H(b, c, d) + x) + ac)) a = RotateLeft(a, s) Return a + b End Function Function MD5_II(a, b, c, d, x, s, ac) a = (a + ((MD5_I(b, c, d) + x) + ac)) a = RotateLeft(a, s) Return a + b End Function Function RotateLeft(lValue, iShiftBits) Return (lValue Shl iShiftBits) | (lValue Shr (32 - iShiftBits)) End Function Function WordToHex$(lValue) Local returnString$ returnString$ = Hex$(lValue) Return returnString$[6..8] + returnString$[4..6] + returnString$[2..4] + returnString$[0..2] End Function |
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Die Globale hab ich übersehen, insgesamt ist es aber sowieso günstiger den Gebrauch von Globalen zu vermeiden wo es geht. aber auch mit einer globalen bool variable ist ein exklusiver schreibzugriff nicht gesichert, daher sollte man IMMER mutex verwenden. angenommen du hast 2 threads und beide überprüfen GLEICHZEITG ob writing false ist... dann können beide writing auf true setzen (lost update) und munter werkeln zu solchen effekten kommt es bei allem möglichen - auch bei vermeindlich atomaren aktionen wie der erhöhung einer variable um 1 auch hier sind mutexe pflicht, denn solche atomaren aktionen sind in assemblercode nicht mehr atomar und es kann zu effekten kommen wie z.b. T1 und T2 zählen n versetzt gleichzeitig um 1 hoch und am ende ist n nur um 1 größer geworden, etc. also: immer MUTEX ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bezog mich bei der Global-Geschichte auch nicht auf Multithreading. Da ist selbstredend der Mutex alleiniges Mittel der Wahl. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group