Astasor Geschrieben 1. Dezember 2013 Geschrieben 1. Dezember 2013 Hallöchen liebe Forums-Community, ich arbeite mit C++ und würde gerne den im Titel genannten Cryptographischen Provider verwenden. Doch mit Bloodshed Dev C++ kann ich ihn irgendwie nicht korrekt mit CryptAquireContext ansprechen. Auch wenn ich WinCrypt.h inkludiere. if(CryptAcquireContext(&hProvKey,NULL,static_cast<LPCTSTR>("MS_ENH_RSA_AES_PROV"),PROV_RSA_AES,0)){ std::cout<<"Kontext erfolgreich erstellt"<<std::endl;} else{std::cout<<"Es ist ein Fehler aufgetreten"<<std::endl; std::cout<<"Fehler: "<<GetLastError()<<std::endl;} [/PHP] Auf diese Art compiliert es zwar, aber GetLastError haut dann immer noch einen Fehler raus. [code]2148073497[/CODE] durch Google habe ich herausbekommen, das der Fehler diese Meldung zum Hintergrund hat [CODE]NTE_KEYSET_NOT_DEF[/code] Bedeutet das, dass der im Titel genannte Provider auf meinem Lappi mit Win 7 nicht installiert ist? Könnt ihr mir da weiterhelfen? Viele Grüße Astasor Zitieren
Klotzkopp Geschrieben 1. Dezember 2013 Geschrieben 1. Dezember 2013 Was soll der static_cast da? Zitieren
Astasor Geschrieben 1. Dezember 2013 Autor Geschrieben 1. Dezember 2013 Danke für deine Antwort, Klotzi. Eigentlich brauch man den Static_Cast da nicht, da es fest definierte Konstanten gibt. Zu sehen auf dieser Seite Cryptographic Provider Names Der Provider mit dem ich gerne arbeiten würde, ist der hier MS_ENH_RSA_AES_PROV. Eigentlch müsste ich in die CryptAquireContext Funktion statt des static_casts nur diesen Schriftzug einsetzen und zwar auf die folgende Art. if(CryptAcquireContext(&hProvKey,NULL,MS_ENH_RSA_AES_PROV,PROV_RSA_AES,0)) {std::cout<<"Kontext erfolgreich erstellt"<<std::endl;} else{std::cout<<"Es ist ein Fehler aufgetreten"<<std::endl; std::cout<<"Fehler: "<<GetLastError()<<std::endl;} [/PHP] Doch dann schreibt mir Bloodshed Dev C++, das es [code]MS_ENH_RSA_AES_PROV[/CODE] nicht kennt. In der Funktionsapi ist der dritte Parameter als LPCTSTR angegeben. Zu sehen hier als Auszug: [CODE]BOOL WINAPI CryptAcquireContext( _Out_ HCRYPTPROV *phProv, _In_ LPCTSTR pszContainer, _In_ LPCTSTR pszProvider, _In_ DWORD dwProvType, _In_ DWORD dwFlags );[/code] Deswegen dachte ich, ich umgehe die Konstante, die vielleicht nur fehlt und caste es direkt dahin. Doch das funktioniert auch nicht. Deswegen frage ich jetzt hier: Was kann ich tun, um an diesen Provider zu kommen. Oder hatte jemand schon mal dasselbe Problem wie ich? Oder könnte es gar an meiner verwendeten IDE selbst liegen? Könnt ihr mir eine andere Entwicklungsumgebung mit integriertem Compiler empfehlen? Denn die andere Alternative wäre, das RIJNDAEL selbst zu implementieren, eine Arbeit die ich mir liebend gerne ersparen würde. Viele Grüße Astasor Zitieren
Klotzkopp Geschrieben 1. Dezember 2013 Geschrieben 1. Dezember 2013 Deswegen dachte ich, ich umgehe die Konstante, die vielleicht nur fehlt und caste es direkt dahin. Das hätte nur dann Aussicht auf Erfolg, wenn die Konstante wirklich dieser Zeichenkette entsprechen würde. Da dieser Provider erst seit Windows XP verfügbar ist, ist das Symbol in wincrypt.h nur definiert, wenn du mindestens für XP baust. Möglicherweise hast du die dafür notwendigen Symbole nicht definiert. Auf der verlinkten Seite steht die richtige Zeichenkette: "Microsoft Enhanced RSA and AES Cryptographic Provider". Aber bitte nicht casten. Oder könnte es gar an meiner verwendeten IDE selbst liegen? Könnt ihr mir eine andere Entwicklungsumgebung mit integriertem Compiler empfehlen?Was spricht gegen Visual Studio Express? Zitieren
Astasor Geschrieben 1. Dezember 2013 Autor Geschrieben 1. Dezember 2013 Mit der anderen Zeichenkette und einer #define-Anweisung funktioniert es. Tja, hätte ich nur mal richtig hingeschaut -__-. Ich werde mir VS-Express mal genauer anschauen. Vielleicht steige ich auch um. Wieder vielen Dank, Klotzkopp ^___^ Bis zum nächsten mal. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.