Verschlüsselung --> Ini!Hilfe!



  • Hmm...habs so geändert, geht trotzdem nicht!

    Hab aber gemerkt, das der den Wert aus der Ini anscheinend nicht ließt...
    Weil:

    Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n);
    Label3->Caption = R->ReadInteger("Activation","Serial",l);
    

    die Labels zeigen mir zu überprüfung die werte an...Label2 zeigt den wert an den ich eingegeben habe an....aber Label3 zeigt 0!

    In der Registry selbst steht aber auch der Wert drin den ich eingegebn hab...

    Wo könnte jetzt Fehler liegen?



  • Berichtigung

    Hab aber gemerkt, das der den Wert aus der Ini anscheinend nicht ließt...

    Nicht aus der Ini sonder aus der Reg!!
    Sorry 🙄



  • wenn man fragen darf, wie gross ist den zB die zahl die du ausgelesen hast nach dem *4?



  • hmm...

    machste das:

    ...
     R->RootKey = HKEY_CURRENT_USER; 
     R->OpenKey(szRegKey, true); 
    ...
    

    auch vor dem einlesen?



  • @Big: da ich als test nur 1234 genommen habe....steht in der Registry 4936...rechnen tut er richtig!

    @Beliah: ich mach das nur das eine mal wo es oben im code steht,also nur wo die Reg geschrieben wird...warum?



  • was passiert, wenn du das /4 weglässt?
    oder kannst auch das -1 in -4 umwandeln..
    so wie ich das denke, findet es keinen eintrag und bekommt -1 das wird /4 gerechnet was -0.25 gibt (int -> keine komastellen -> -0 = 0)



  • Auch wenn ich das +4 und /4 weglasse, kommt nur 0!
    Aber nur bei static int!
    Wenn ich normal int nehme, dann bekomme ich utopische werte!



  • Sensitive schrieb:

    @Beliah: ich mach das nur das eine mal wo es oben im code steht,also nur wo die Reg geschrieben wird...warum?

    weil die variable ja wissen muss wo sie suchen soll.



  • Und wo soll ich das jetzt im Quellcode nochmal hinsetzten deines erachtens?
    Danke schonmal wieder für antwort....



  • vor dem einlesen, bzw. falls die Variable in der ganzen Form verfügbar ist(also die deklaration in der klassendefinition der form steht), im Konstruktor der Form, dann könnteste auch das vor dem schreiben löschen, bzw. besser erstma auskommentieren und testen obs dann noch funktioniert.

    ist aber keine garantie das es so funktioniert...



  • Also hab das grad mal vorm lesen reingeschrieben:

    R->RootKey = HKEY_CURRENT_USER;
    R->OpenKey(szRegKey, true);
    static int n = Ini3->ReadInteger("Registration","Reg-Number",n);
    static int l = R->ReadInteger("Activation","Serial",l/4);
    static int m = Form3->Query4->FieldByName("Seriennummer")->AsInteger;
    Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n);
    Label3->Caption = R->ReadInteger("Activation","Serial",l);
    

    eingefügt...dann funktiniert es wenn schon was drin steht in der registry!

    Wenn ich allerdings die einträge in der registry lösche schreibt er sie an die falsche stelle!

    Rictig wäre hier:

    HKEY_CURRENT_USER -> Software -> Sen -> Login -> Activierung

    Er schreibt es aber hier:

    HKEY_CURRENT_USER -> Software -> Sen -> Login -> Software -> Sen -> Login -> Activierung!

    Also er schreibt in den sSchlüsseö den Schlüssel nochmal rein!

    Also irgendwie komisch!



  • klappt es wenn du die zeile:

    R->OpenKey(szRegKey, true);
    

    vor dem schreiben auskommentierst?

    [EDIT]
    wenn nicht dann versuch mal:

    R->CloseKey();
    

    nach dem einlesen.

    schau dazu auch mal in der BCB-Hilfe zu TRegistry.

    ich geh mal davon aus das du TRegistrybenutzt da dies die einzige für Ini/Registry 'zuständige' klasse ist die OpenKey als methode hat(bzw. die einzige die ich gefunden hab 😉 )
    [/EDIT]



  • Wenn ich das auskommentiere, schreibt er weider an die richtige stelle, ließt es aber wieder nicht!

    und wenn ich

    R->RootKey = HKEY_CURRENT_USER;
    

    auskommentiere, ließt er, aber schreibt wieder an falsche stelle... 😕 😮 😡



  • und wenn du, wie ich oben beschrieben hab, CloseKey() benutzt?



  • Jahhaaaaaaa 👍 👍

    bis jetzt gehtz!

    Ich könnt dich knutschen!

    da hab ich aber direkt noch eine frage!:

    Wenn ich in einer Datenbank eine zahl stehen habe....und ich die über ein Edit vergleiche!

    Also ich geb eine Zahl in ein Editfeld, und diese soll mit einer Zahl in Datenbank abgeglichen werden, kann ich das da auch so machen, das ich das 3fache der Zahl eingebe, und er es als richtig erkennt! Quasi auch eine kleine verschlüsselung!

    Beispiel:

    In Datenbank steht 1234 😉

    das ich eben 2468 eingeben muss damit er es akzeptiert...

    geht das irgendwie so:

    Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" +Edit1->Text+ "';")*2;
    

    Und ja ich weis, eine Frage pro Thread, ein Thread pro Frage, aber wir sind grad so schön im Gespräch.... 😃



  • Sensitive schrieb:

    geht das irgendwie so:

    Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" +Edit1->Text+ "';")*2;
    

    so wäre das oben richtig:

    Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) * 2) + "';");
    

    wenn ich das richtig verstehe, soll aber die eingabe durch 2(3,4,5 oder was weis ich) geteilt werden,also wäre das besser:

    Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
    

    ps.: das ToIntDef(-1) gibt -1 zurück falls im Editfeld was steht was nicht in eine Zahl umgewandelt werden kann(z.B. normaler Text)



  • Klasse,klappt bis jetzt alles!
    Auch wenns nich ganz einfach war...aber bis jetzt gehtz...=)!
    Vielleicht fällt mir noch was ein,dann frag ich hier drin wieder! 🙂



  • Lol, noch ein kleines Problem...dann bin ich vorerst schlau genug!

    Das mit dem durch 2 teilen bei der Editeingabe und vergleich mit datanbank funkt schonmal

    Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
    

    allerdings nur für den ersten wert der drin steht in DB!

    Wie kann ich es machen das auch die anderen akzeptiert werden!
    Mit table hab ich das so gemacht:

    Form3->Database1->Open();
    Form3->Table1->Open();
    Form3->Table1->SetKey();
    Form3->Table1->Fields->Fields[0]->AsString = Edit1->Text;
    if (!Form3->Table1->GotoKey())
    {
    }
    else
    {
    }
    

    weil ich anders nicht weiß wies geht!

    Er findet zwar jeden wert der tabelle bei der Editeingabe:

    try
      {
      //Ini1->WriteInteger("Login","Uses",a);
      Form3->Query4->Close();
      Form3->Query4->SQL->Clear();
      Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
      Form3->Query4->Open();
    
       if (!Form3->Query4->Eof)
       {
        ShowMessage ("Akzeptiert!Starten Sie das Programm neu um Aktivierung abzuschließen!");
    

    da bringt er dann eben "Akzeptiert!Starten Sie das...."

    Aber beim vergleich dann:

    oid __fastcall TForm11::FormShow(TObject *Sender)
    {
    
    Form3->Query4->Close();
    Form3->Query4->SQL->Clear();
    Form3->Query4->SQL->Add("select * from Seriennummer");
    Form3->Query4->Open();
    R->RootKey = HKEY_CURRENT_USER;
    R->OpenKey(szRegKey, true);
    static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2;
    static int l = R->ReadInteger("Activation","Serial",-l)/3;
    static int m = Form3->Query4->FieldByName("Seriennummer")->AsInteger;
    Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2;
    Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3;
    R->CloseKey();
    {
     Ini3->WriteInteger("Registration","Reg-Number",n);
    }
    if (n==m && l==n)
     {
      ShowMessage ("Bereits Registriert");
      Form1->ShowModal();
    
      }
    
    else
     ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!");
    
    }
    

    da sagt er das ich korrekte nummer eingeben soll.....



  • PS: Wenn ich den Wert der in der Tabelle als erstes steht eingebe, geht alles!
    Nur bei darunterstehenden nicht...



  • wenn ich das richtig verstehe sind in der datenbank die korrekten nummer.
    wieso machste das bei der start-abfrage das nicht so wie bei der eingabe?

    [quote=sensitive]

    Form3->Query4->Close();
      Form3->Query4->SQL->Clear();
      Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
      Form3->Query4->Open();
    

    [/quote]

    aber so:

    Form3->Query4->Close();
      Form3->Query4->SQL->Clear();
      Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "';");
      Form3->Query4->Open();
    

    und fragst dann über Form3->Query4->RecordCount ab ob ein datensatz gefunden wurde?


Anmelden zum Antworten