データに AES 256 ビット暗号化を使用したいのですが、それは "MS_ENH_RSA_AES_PROV" によって提供されます。そのために、CryptAcquireContext の 3 番目のパラメーターとして pszProviderName=TEXT("MS_ENH_RSA_AES_PROV") を使用して以下のコードを実行しようとすると、エラー番号 80090019 のような出力が得られます。 .このエラー コードは、「要求されたプロバイダーが存在しない」ことを意味します。
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")
void main(void)
{
// Handle for the cryptographic provider context.
HCRYPTPROV hCryptProv;
// The name of the container.
LPCTSTR pszContainerName = TEXT("MyFilter_Container");
// The name of the provider
LPCTSTR pszProviderName = TEXT("MS_ENH_RSA_AES_PROV");
// Begin processing. Attempt to acquire a context
if(CryptAcquireContext(
&hCryptProv,
pszContainerName,
pszProviderName,
PROV_RSA_FULL,
0))
{
_tprintf(TEXT("A crypto context acquired"));
// Release the CSP.
if(hCryptProv)
{
if(!(CryptReleaseContext(hCryptProv, 0)))
{
_tprintf(TEXT("Error during CryptReleaseContext."));
}
}
}
else
{
_tprintf(TEXT("An error occurred in the program. \n"));
_tprintf(TEXT("Error number %x.\n"), GetLastError());
exit(1);
}
}
また、pszProviderName=TEXT("Microsoft Enhanced RSA and AES Cryptographic Provider") を使用すると、エラー番号 0x8009001b が表示されます。これは、「dwProvType で指定されたプロバイダー タイプが、見つかったプロバイダー タイプと一致せず、このエラーは pszProviderName が指定した場合にのみ発生する可能性がある」ことを意味します上記のエラー番号は、msdn の CryptAcquireContext ドキュメントで指定されています。なぜこれが起こっているのかわかりません。このパラメータが Null の場合、デフォルトの CSP を使用することを意味し、その場合はすべて正常に動作します。windows7を使用しています。この CSP は利用できませんか、それとも他の理由がありますか?誰か助けてください。よろしくお願いします。