DLL zur Erstellung von RSA-Schlüssel/Ent- und Verschlüsselung

  • Hallo zusammen,

    ich suche eine Dll mit welcher ich leicht und performant ein RSA-Schlüsselpaar erstellen kann und ebenfalls Texte ver- und entschlüsseln kann.
    Die rsa_dll.dll war das einzige was ich gefunden habe und ein Aufruf mit

    [autoit]

    $call = DllCall($dll, "long", "RSA_generate_keys", "UCHAR", "test.privkey", "UCHAR", "test.pubkey", "ULONG", "2048", "ULONG", "2048")

    [/autoit]

    Liefert zwar eine 0 zurück (erfolg laut Quelltext) schreibt aber nichts in die jeweiligen Dateien. Eine vollständige Pfadangabe ändert auch nichts.

    Vielen dank schonmal für die Hilfe

  • Habe ich am Anfang schon probiert, weil ich UCHAR nicht in der Hilfe gefunden habe. Leider stürzt dann AutoIt ab :(

  • Auch wenn es sich nicht gehört, der Direktlink (finde die Seite leider nicht mehr!)
    http://www.planet-source-code.com/upload_PSC/ftp…53211162001.zip

    Header der Funktion:

    Zitat

    // this is function is simply what it said
    // return 0 (zero) if success, *privatekey and *publiccertificate MUST be preallocated and enough size
    unsigned long __stdcall RSA_generate_keys(unsigned char *privatekey, unsigned char *publiccertificate, unsigned long *privatekey_length, unsigned long *publiccertificate_length)

  • Hast du die DLL selber kompiliert? Da könnte der Funktions-Name ein wenig anders lauten wegen dem stdcall mangling.

    Die Deklaration der Funktion lautet ja so:

    Code
    unsigned long __stdcall RSA_generate_keys(unsigned char *privatekey, unsigned char *publickey, 
    										  unsigned long *privatekey_length, unsigned long *publickey_length);

    Also würde ich das in AutoIt so schreiben:

    [autoit]


    $aCall = DllCall($dll, "ULONG", "RSA_generate_keys", "str", "test.privkey", "str", "test.pubkey", "ULONG*", "2048", "ULONG*", "2048")

    [/autoit]

    Ungetestet.

  • Nein, habe die vorkompilierte genommen, welche dabei war.

    Habe gerade deine Variante getestet und es geht tatsächlich. Zumindest bekomme ich jetzt Rückgabewerte in $aCall rein geschrieben.
    Leider schreibt er aber immer noch nichts in die beiden Dateien. Muss man da vielleicht ein Handle übergeben?

  • Hab jetzt den Quellcode nicht mehr bei mir. Bist du sicher, dass in Dateien geschrieben werden soll?
    Es könnte auch der Code in die Variablen $aCall[1] und $aCall[2] zurückgegeben werden. Dann würde ich aber beides mal 'str*' und einen Leerstring übergeben.

  • Sehr gut, du hattest recht. Tatsächlich werden die Schlüssel im Anschluss zurück gegeben.
    Ver- und Entschlüsselung habe ich auch auf Anhieb geschafft.

    Interessant ist, dass bei der Verschlüsselung und erneuten Entschlüsselung nur bei ca. 35% wieder der Originaltext dabei raus kommt.
    Scheint aber an der VERschlüsselung zu liegen, denn wenn ich nur einmal verschlüssel und dann 1000 mal das selbe entschlüssel komme ich auf 100% richtige ausgaben.