RSA Verschlüsselung per DLL

  • Hallo Community,

    ich arbeite Momentan an einem Client-Server Projekt welches über das Internet Daten verschickt, diese möchte ich gerne hybrid verschlüsseln. Der symetrische Part dabei macht mir keine Probleme, mehr die RSA-Verschlüsselung für den symetrischen Key.
    Dabei bin ich neben der DLL von peethebee aus dem Jahre 2007 (die man mittlerweile nicht mehr downloaden kann) nur auf diesen Thread gestoßen. Also hab ich mich versucht mit dieser DLL-Datei ein Schlüsselpaar zu generieren, und einen Text mit dem öffentlichen Schlüssel zu verschlüsseln. Jedoch, bin ich mir nicht sicher wie ich den DllCall gestalten soll, villeicht kann mir da einer von euch weiterhelfen der sich schon mehr damit beschäftigt hat.

    Funktionsheader zu RSA_encrpt:
    unsigned long __stdcall RSA_encrypt(unsigned char *source, unsigned long source_size,
    unsigned char *result, unsigned long result_size,
    unsigned char *pubkey_content, unsigned long pubkey_content_size)


    Wie muss ich den DllCall Aufruf gestalten, das die Funktions ordnungsgemäß funktioniert, und kann ich das ganze dann so auslesen wie ich es hier versucht habe? (Also per GetData aus dem DllStruct heraus?)


    Vielen Dank für die Hilfe


    [autoit]


    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Dim $sStringPlain = "hallotest123", $sStringEncoded = ""
    Dim $hRSA_Dll = DllOpen("rsa.dll")
    Dim $aRet = DllCall($hRSA_Dll, "ULONG", "RSA_generate_keys", "str", "test.privkey", "str", "test.pubkey", "ULONG*", "2048", "ULONG*", "2048")
    Dim $sPrivateKey = $aRet[1]
    Dim $sPublicKey = $aRet[2]

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ConsoleWrite($sPrivateKey & @CRLF & @CRLF & @CRLF)
    ConsoleWrite($sPublicKey & @CRLF & @CRLF & @CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Dim $tagStruct = "struct;str source; ulong source_size;str result;ulong result_size;str pubkey_content;ulong pubkey_content_size;endstruct"
    Dim $tStruct = DllStructCreate($tagStruct)
    DllStructSetData($tStruct, "source", $sStringPlain)
    DllStructSetData($tStruct, "pubkey_content", $sPublicKey)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $aRet = DllCall($hRSA_Dll, "ULONG", "RSA_encrypt", _
    "str", DllStructGetPtr($tStruct,"source"), "ULONG", StringLen(DllStructGetData($tStruct,"source")), _
    "str", DllStructGetPtr($tStruct,"result"), "ULONG", 1000, _
    "str", DllStructGetPtr($tStruct,"pubkey_content"), "ULONG", StringLen(DllStructGetData($tStruct,"pubkey_content")))
    ConsoleWrite("@error = " & @error &@CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($aRet)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $sStringEncoded = DllStructGetData($tStruct, "result")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ConsoleWrite(">" & $sStringEncoded & "< " &@CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;~ unsigned long __stdcall RSA_encrypt(unsigned char *source, unsigned long source_size,
    ;~ unsigned char *result, unsigned long result_size,
    ;~ unsigned char *pubkey_content, unsigned long pubkey_content_size)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Hallo Ryan,

    Bist du schon etwas weiter mit deinem Projekt?
    Ich habe ebenfalls vor etwas ähnliches zu realisieren und stehe vor dem gleichen Problem nirgends eine vernünftige RSA-Implementierung zu finden.

    Einzig hier ist etwas doch leider kann ich kein russisch und die source files bringen mich auch nicht wirklich weiter.
    https://translate.google.at/translate?sl=ru&tl=de&js=y&prev=_t&hl=de&ie=UTF-8&u=http%3A%2F%2Fautoit-script.ru%2Findex.php%2Ftopic%2C8343.msg56412.html%23msg56412

  • Noch was habe ich gefunden, doch leider existiert PluginOpen seit Version 3.3.10.0 (23rd December, 2013) nicht mehr:
    Datei und Pw verschlüsselung mit RSA

    Weiß jemand wie man die dll ohne PluginOpen einbinden und somit das Script nutzen kann?

    Im Original sieht es so aus:
    PluginOpen("rsa.dll")
    RSA_GenerateKeys($bitlens, $pfad, $Name)

    Ich habe nun folgendes probiert:
    DllCall("rsa.dll", "none", "RSA_GenerateKeys", "int", $bitlens, "str", $pfad, "str", $Name)

    aber das funzt leider nicht.

    Wer weiß Rat was ich hier falsch mache?


    Besten Dank im Voraus!

    Einmal editiert, zuletzt von Snifty (3. August 2015 um 14:55)

  • Danke für den Code aber das sind symmetrische Verschlüsselungsverfahren.
    Ich bin auf der Suche nach einem asymmetrischen System (Verschlüsslung mit publick key und Entschlüsselung mit private key) wie eben RSA.

  • Wer lesen kann, ist klar im Vorteil. Ich hatte es überlesen, dass Du ein asymmetrischen Verschlüsselungsverfahren suchst. Da wir gerade beim Lesen sind; in der Dokumentation zu CAPICOM von Microsoft steht alles, was Du brauchst.

    Hier der Quellcode zum Verschlüsseln ...