String Entschlüsselung funktioniert nicht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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?

  • 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.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • 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).

  • Weiß jetzt nicht was du genau meinst..
    Der erste String wird korrekt entschlüsselt, der zweite jedoch wird nicht entschlüsselt. (Wieso auch immer?)


    Edit: Push (Letztes Bearbeiten / Erstellen des Beitrages: 16.07.2013, 13:00)

    Einmal editiert, zuletzt von UncleSub ()

  • Ähm, weil ich beide Strings brauche?


    Hat jemand einen geeigneten Lösungsvorschlag?


    Edit: Push (Letztes Bearbeiten / Erstellen: 19.07.2013, 11:05)
    Edit²: Push (Letztes Bearbeiten: 02.08.2013, 02:10)

    2 Mal editiert, zuletzt von UncleSub () aus folgendem Grund: Push