Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Microsoft Enhanced RSA AES Provider mit C++ ansprechen

Empfohlene Antworten

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

  • Autor

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

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?
  • Autor

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.