Beiträge von UncleSub

    ja habe ich vor ca 5min selber schon gefunden trotzdem danke
    aber was war daran jetzt so schwer?


    Es war so schwer, weil du erstmal nur gesagt hast, dass du eine "mysql.so" suchst. Ich kenne aber mind. 4 mysql Plugins, die alle mysql.so heißen. Als du sagtest, dass du die r31 suchst war aber eigentlich alles klar.
    Als kleiner Tipp: Schreib diese Info nächstes mal einfach in den Anfangspost. Das verschont deine und unsere Nerven. Gedankenlesen kann hier noch keiner ;)

    dini_FloatSet(Spielerdatei,"Gesundheit",GetPlayerHealth(playerid));


    Wenn dann so:



    new Float:health;
    GetPlayerHealth(playerid, health);
    dini_FloatSet(Spielerdatei,"Gesundheit", health);


    So geht dann auch das


    warning 202: number of arguments does not match definition (Beim SpielerSpeichern)


    weg.


    Wenn du es schon so machst must du am Ende auch ein ";" setzen.
    Such mal nach "Adminlevel" bis du zu dem Punkt kommst, an dem es definiert wird.
    Dort müste auch Fraktion, Baned, muted zu finden sein.
    Da must du dann Float:Gesundheit dazu schreiben.


    Er benutzt PVars und kein Spieler Array.

    Ich möchte einfach eine Funktion aufrufen:


    Dies geht mit CallRemoteFunction oder CallLocalFunction


    Der Aufruf von Funktionen mit CallLocalFunction/CallRemoteFunction ist deutlich langsamer als der direkte Funktionsaufruf. Wie es Beavis: geschrieben hatte ist es deutlich besser.
    Außerdem ein Beispiel: Wenn du einen Stock erstellst (eigentlich Stock Function) rufst du ihn nicht mit CallLocalFunction auf, sondern direkt. ;)

    Mit dem GPS Plugin von GamerZ hat jemand so etwas gebastelt.
    Siehe hier:


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Danke @BlackAce: |-|auke: Jeffry: auf das mit dem Null Terminator wär ich so schnell nicht gekommen. Ich habe mich einfach mal so auf die Funktion aus dem Netz verlassen und habe gedacht, dass damit alles stimmt. Tja falsch gedacht. Großes Dankeschön an euch! :)

    Ich seh da auch keinen Fehler, aber du könntest ja mal mit strdel versuchen die strings vor dem formatieren zu leeren.


    Das könnte evtl. eine Lösung sein.
    Sieht irgendwie nach einem vermischen der Arraymemory aus, auch wenn ich sie mir nicht erklären kann :D


    Ich kanns mir auch nicht erklärn..naja habs mal mit strdel versucht, damit konnte ich zumindest den zweiten string auf die richtige länge "trimmen".
    Das Speichern bereitet dennoch noch probleme..nun steht in der Datei:


    Code
    Q0099N2blN6fy6gyl0n64Twy31Wc78piE8okqrp4Zje35b1400u6Pa2nt566Ki33p51005s796D9o7PV8SVu3701Ri1ypU3X9z2s97Uy99l6310E9IDPk86t5lyD27sg


    Also der erste string wird nich gespeichert. Hab dann auch mal einfach direkt das gemacht:



    format(string, 100, "/UserSalts/%s.txt", SpielerName(playerid));
    saltfile = fopen(string, io_write);
    if(saltfile)
    {
    //strdel(string, 0, sizeof(string));
    //format(string, 300, "%s\r\n%s", salt, key);
    fwrite(saltfile, salt);
    fwrite(saltfile, "\r\n");
    fwrite(saltfile, key);
    fclose(saltfile);
    }


    Kommt aber das selbe bei raus... :(

    Hallo zusammen,


    ich habe mal wieder ein sehr mysteriöses Problem mit der Passwort Verschlüsselung der Accounts. Und zwar erstelle ich mit einer Funktion zwei zufällige Strings, mit denen ich dann die Passwörter sicher verschlüsseln möchte. Zum speichern dieser Strings nutze ich das Standard File System. Zu den Problemen:


    1. Beim erstellen der Strings durch unten angegebene Funktion wird der erste String zwar korrekt erstellt, an den zweiten wird aber einfach der erste erstellte String angehängt (er ist also doppelt so lang!) und das, obwohl (!) der String gar nicht die dafür benötigte Länge hätte.


    Code:



    new string[478], salt[128], key[128], hashedpw[H_WHIRLPOOL_LEN], File:saltfile;
    randomString(salt, sizeof(salt));
    printf("%s (%i)",salt, strlen(salt)); //Länge ist 128
    randomString(key, sizeof(key));
    printf("%s (%i)",key,strlen(key)); //Länge ist 256????!


    Funktion zu randomString:



    stock randomString(strDest[], strLen = 10) //by RyDeR
    {
    while(strLen--)
    strDest[strLen] = random(2) ? (random(26) + (random(2) ? 'a' : 'A')) : (random(10) + '0');
    }


    2. Beim speichern sollte eigentlich der erste und der zweite String gespeichert werden, dies funktioniert teilweise. Es wird nämlich an den ersten zu speichernden String noch die vorher (zum öffnen/erstellen der Datei) angegebene File-Directory angehängt. (Schwer zu erklären aber das steht hinterher in der Datei)


    Code
    6dGJ6VGS60C59s900Q564943l94r5V85582Mh23x0Kxr2fl11k1q24oq857869t20T642v1286H6s33rpND39FB686536dZJ0Bk9306Kxin8wd0c00846U441B4i5Hb0/UserSalts/UncleSub.txt
    r4g50MYf67TQA21dNLQwt470916743Le6qe94dw145hTcMA1Y47n6y0FM9r5c15181gl6xY20DUQV973U38ZlB70V1r698K2U69wX4Bm43x54Per835s0h780N5D229X6dGJ6VGS60C59s900Q


    Code dazu:



    format(string, 100, "/UserSalts/%s.txt", SpielerName(playerid));
    saltfile = fopen(string, io_write);
    if(saltfile)
    {
    format(string, 300, "%s\r\n%s", salt, key);
    fwrite(saltfile, string);
    fclose(saltfile);
    }


    Ich kann nirgendwo einen Fehler erkennen, aber vielleicht weiß ja einer von euch weiter.

    Ja klar, sorry, mein Fehler.
    Du könntest schauen, ob es eine neuere Version der Include mit ALS Hook gibt, falls nicht kannst du mir die Include schicken und ich schreibe sie auf ALS um.

    Ich verstehe den Zweck nicht, warum man einen Hash entschlüsseln will. Sowas wollen eigentlich nur Menschen, die nichts Gutes im Sinn damit haben. Darf man erfahren, was dein Vorhaben ist? Denn ich glaube, da lässt sich ein sinnvollerer Weg finden, sofern es legitim ist.


    Ich versuche ja nicht einen Hash zu entschlüsseln, sondern nur einen Ciphertext.
    Verschlüsseln = Etwas verschlüsseln, was wieder entschlüsselbar ist.
    Hashen = Nicht entschlüsselbar.
    Warum ich das mache ist ganz einfach: Ich habe mit dem selben Plugin zwei kryptographisch sichere random Strings erstellt (um einen sicheren Hash zu erstellen), nämlich einen Salt und einen Key, mit dem ich dann das Passwort verschlüssele.
    Da diese random Strings eine merkwürdige Formatierung haben, kann man sie nur schwer speichern (was man machen muss), weshalb ich diese verschlüssel (damit ich sie später wieder entschlüsseln und benutzen kann).
    Eigentlich sollte das so funktionieren, jedoch wird der zweite geladene String nicht richtig entschlüsselt (siehe Oben).

    Hallo zusammen,


    ich lade zur Zeit Verschlüsselte Strings aus einer SQLite Datenbank. Diese will ich dann entschlüsseln.
    Problem an der Sache ist, dass die Strings zwar richtig aus der Datenbank geladen und der erste der beiden Strings auch richtig entschlüsselt wird, aber der zweite String "(null)" annimmt.
    Das merkwürdige ist jedoch, dass es mit (fast) dem selben Code unter OnGameModeInit als Test funktioniert.


    Hier der Code, der nicht funktioniert:



    new string[256], salt[128], key[128], hashedpw[H_WHIRLPOOL_LEN], DBResult:result, buffer[176];
    format(string, 256, "SELECT * FROM `Salts` WHERE `Name`='%s'", SpielerName(playerid));
    result = db_query(saltdb, string);
    db_get_field(result, 1, buffer, sizeof(buffer)), crypto_base64_dec(buffer, sizeof(buffer), salt, sizeof(salt));
    db_get_field(result, 2, buffer, sizeof(buffer)), crypto_base64_dec(buffer, sizeof(buffer), key, sizeof(key));
    db_free_result(result);
    print(key);
    if(issqlnull(key)) return print ("Key ist null") & 1;
    sql_escape_string(shandle, inputtext, string);
    strins(string, salt, 0);
    hhash_hmac(H_WHIRLPOOL, string, key, hashedpw, H_WHIRLPOOL_LEN);
    format(string, sizeof(string), "SELECT * FROM `Accounts` WHERE `ID`='%i' AND `Passwort`='%s' LIMIT 1", Spieler[playerid][pMySQLID], hashedpw);
    sql_query(shandle, string, QUERY_THREADED | QUERY_CACHED, "OnPlayerLoaded", "ri", playerid);


    Hier der Code, wo es funktioniert:


    Klick mich!

    new salt[128], key[128], encsalt[176], enckey[176], string[428], lsalt[128], lkey[128], lencsalt[176], lenckey[176], DBResult:result;
    crypto_random(salt, sizeof(salt));
    crypto_random(key, sizeof(key));
    print("Salt & Key erstellt:");
    print(salt);
    print(key);
    crypto_base64_enc(salt, sizeof(salt), encsalt, sizeof(encsalt));
    crypto_base64_enc(key, sizeof(key), enckey, sizeof(enckey));
    print("Salt & Key verschlüsselt:");
    print(encsalt);
    print(enckey);
    format(string, 428, "INSERT INTO `Salts` (`Name`, `Salt`, `Key`) VALUES (\"%s\", \"%s\", \"%s\");", "UncleSub", encsalt, enckey);
    db_free_result(db_query(saltdb, string));
    print("Verschlüsselter Salt & Key in Tabelle eingefügt");
    format(string, 256, "SELECT * FROM `Salts` WHERE `Name`='%s'", "UncleSub");
    result = db_query(saltdb, string);
    db_get_field(result, 1, lencsalt, sizeof(lencsalt));
    db_get_field(result, 2, lenckey, sizeof(lenckey));
    db_free_result(result);
    print("Verschlüsselter Salt & Key aus Tabelle geladen:");
    print(lencsalt);
    print(lenckey);
    crypto_base64_dec(lencsalt, sizeof(lencsalt), lsalt, sizeof(lsalt));
    crypto_base64_dec(lenckey, sizeof(lenckey), lkey, sizeof(lkey));
    print("Salt & Key entschlüsselt:");
    print(lsalt);
    print(lkey);
    if(!strcmp(salt, lsalt)) print("Salts identisch");
    else print("Salts nicht identisch");
    if(!strcmp(key, lkey)) print("Keys identisch");
    else print("Keys nicht identisch");*/


    Ich verstehe nicht, wieso der obere Code nicht funktioniert. Weiß einer von euch weiter?

    Ist so, seitde ich FoxBan.inc im Script habe..


    Liegt daran, dass FoxBan eine alte Hook Methode benutzt / bzw. nicht ALS. Dadurch wird nicht abgefragt, ob bereits ein Hook existiert und dieser wird dann nicht entfernt.
    Du könntest probieren FoxBan direkt nach a_samp.inc zu includieren.