Signatur mit Public Key verifizieren



  • Hallo Community,

    ich bin noch nicht lange bei der C++ Programmierung dabei, stoße aber schon früh auf Hindernisse. Ich hoffe Ihr könnt mir helfen.

    Folgendes: Ich habe in Java ein Programm geschrieben, mit dem eine Txt-Datei signiert wird:

    encKey = Base64.decode(private_key, Base64.DONT_BREAK_LINES);
                    PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(encKey);
                    KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
                    privKey = keyFactory.generatePrivate(encodedKeySpec);
    
                    Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
    
                    //Signaturobjekt wird mit dem PK initialisiert
                    dsa.initSign(privKey);
    
                    ///////////////////////
                    String strLizenz = "";
                    FileReader fr2 = new FileReader(txtEncrypt.getText());
                    BufferedReader br2 = new BufferedReader(fr2);
                    while((s = br2.readLine()) != null)
                    {
                        strLizenz += s;
                    }
                    fr2.close();
    
                    byte[] byteLizenz = strLizenz.getBytes();
                    len = byteLizenz.length;
                    dsa.update(byteLizenz, 0, len);
                    //////////////////////
    
                    byte[] realSig = dsa.sign();
    
                    //Signatur in Byteform -> String
                    String strSignatur =  Base64.encodeBytes(realSig);
    
                    //Lizenzfile wird als String gelesen
                    FileReader fr = new FileReader(Lizenzpfad);
                    BufferedReader br = new BufferedReader(fr);
                    while((s = br.readLine()) != null)
                    {
                        Sig += s + "\n";
                    }
                    fr.close();
    
                    // String des Lizenzfiles wird mit dem String
                    // der Signatur verknüpft
                    Sig += "SIG=" + strSignatur + "\n";
    
                    //Signaturfile wird abgespeichert              
                    FileWriter fw = new FileWriter(txtEncrypt.getText());
    
                    fw.write(Sig);
                    fw.close();
    
                    JOptionPane.showMessageDialog(null, "Signature erstellt.");
    

    Mir ist klar das obiger Code nicht sauber ist, mir geht es eigentlich um folgendes.

    Mein Problem ist nun das ich in C++ eine dll schreiben möchte, mit der man die Signatur mit dem Originalfile verifizieren kann. Die DLL steht schon soweit mit internem Public_Key zum verifizieren und die Originaldatei samt Signatur kann ich ebenfalls einlesen.

    Nur leider habe ich keinen Plan wie ich es in C++ anstelle mithilfe des Public_Keys die Signatur mit dem Originalfile zu vergleichen? Hoffe ihr konntet mich soweit verstehen. Für Hilfe wäre ich sehr dankbar. 😃



  • hi,

    warum verwendest du nicht eine md5 checksum?



  • Hmmm weiss nicht so recht wie die Antwort gemeint ist. Problem ist halt das ich gegeben habe: eine DLL mit Public Key, den Originaltext und die Signatur. Inwiefern kann ich da mit MD5 was erreichen? Oder bezieht sich deine Antwort auf den Java-Teil?

    Gruß



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ^^vielleicht kannst du dir was aus openSSL rauskopieren. ich glaube das kann auch mit pkcs#8 usw. umgehen. falls es unter windoofs laufen soll, kann's auch sein, das win das schon so kann. da frag am besten mal im winapi-forum. warum machst du die verifizierung nicht auch in java? das sollte viel einfacher gehen, als sich den ganzen kleinkram mit c++ selbst hinzufummeln.
    🙂



  • Hab da auch schon was mit OpenSSL gefunden und werde das mal ausprobieren 🙂 Die Verifizerung mach ich auch ebenfalls schon in Java (funktioniert dort auch ohne Probleme), jedoch will ich auch eine dll dafür haben, deswegen der Aufwand. Danke schonmal für die Antworten. 😉


Anmelden zum Antworten