次の方法で共有


CryptGetKeyParam 関数 (wincrypt.h)

重要 この API は非推奨です。 新規および既存のソフトウェアでは、Cryptography Next Generation API の使用を開始する必要があります。 Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptGetKeyParam 関数は、キーの操作を制御するデータを取得します。 Microsoft Cryptographic Service Provider が使用されている場合、基本対称キーマテリアルは、この機能またはその他の機能では取得できません。

構文

BOOL CryptGetKeyParam(
  [in]      HCRYPTKEY hKey,
  [in]      DWORD     dwParam,
  [out]     BYTE      *pbData,
  [in, out] DWORD     *pdwDataLen,
  [in]      DWORD     dwFlags
);

パラメーター

[in] hKey

クエリ対象のキーのハンドル。

[in] dwParam

作成するクエリの種類を指定します。

すべてのキー型に対して、このパラメーターには次のいずれかの値を含めることができます。

価値 意味
KP_ALGID
キー アルゴリズムを取得します。 pbData パラメーターは、キーの作成時に指定されたアルゴリズムの識別子を受け取る ALG_ID 値へのポインターです。

CryptGenKey 関数の Algid パラメーターに AT_KEYEXCHANGE または AT_SIGNATURE が指定されている場合、キーの生成に使用されるアルゴリズム識別子は、使用されるプロバイダーによって異なります。 詳細については、ALG_IDを参照してください。

KP_BLOCKLEN
hKey パラメーターでセッション キーが指定されている場合は、キー暗号のブロック長を取得します。 pbData パラメーターは、ブロック長を受け取る DWORD 値へのポインターです (ビット単位)。 ストリーム暗号の場合、この値は常に 0 です。

の公開キーと秘密キーのペア が hKey指定されている場合は、キー ペアの暗号化の粒度を取得します。 pbData パラメーターは、暗号化の粒度を受け取る DWORD 値へのポインターです (ビット単位)。 たとえば、Microsoft Base Cryptographic Provider では 512 ビット RSA キー ペアが生成されるため、これらのキーに対して値 512 が返されます。 公開キー アルゴリズム暗号化がサポートされていない場合、取得される値は未定義です。

KP_CERTIFICATE
pbData は、識別エンコード規則 (DER) を使用してエンコードされた X.509 証明書 受信するバッファーのアドレスです。 証明書公開キー は、対応する署名または交換キーと一致する必要があります。
KP_GET_USE_COUNT
この値は使用されません。
KP_KEYLEN
キーの実際の長さを取得します。 pbData パラメーターは、キーの長さをビット単位で受け取る DWORD 値へのポインターです。 KP_KEYLEN を使用して、任意のキー型の長さを取得できます。 Microsoft 暗号化サービス プロバイダー (CSP) は、CALG_DESの場合は 64 ビット、CALG_3DES_112の場合は 128 ビット、CALG_3DESの場合は 192 ビットのキー長を返します。 これらの長さは、CryptGetProvParam 関数の dwParam 値を PP_ENUMALGSに設定してアルゴリズムを列挙するときに返される長さとは異なります。 この呼び出しによって返される長さは、キーに含まれるパリティ ビットを含む、キーの実際のサイズです。

CALG_CYLINK_MEKALG_ID をサポートする Microsoft CSP は、そのアルゴリズムの 64 ビットを返します。 CALG_CYLINK_MEK は 40 ビットのキーですが、キーの長さを 64 ビットにするためにパリティとゼロのキー ビットがあります。

KP_SALT
キーの salt 値を取得します。 pbData パラメーターは、リトル エンディアン 形式で salt 値 受け取る BYTE 配列へのポインターです。 salt 値のサイズは、使用されている CSP とアルゴリズムによって異なります。 salt 値は、公開キーと秘密キーのペアには適用されません。
KP_PERMISSIONS
キーのアクセス許可を取得します。 pbData パラメーターは、キーのアクセス許可フラグを受け取る DWORD 値へのポインターです。

現在、次のアクセス許可識別子が定義されています。 キーのアクセス許可には、0 または次の値の 1 つ以上の組み合わせを指定できます。

CRYPT_ARCHIVE
キーのハンドルの有効期間中にエクスポートを許可します。 このアクセス許可は、キーの内部アクセス許可フィールドに既に設定されている場合にのみ設定できます。 このアクセス許可をクリアしようとすると無視されます。
CRYPT_DECRYPT
復号化を許可します。
CRYPT_ENCRYPT
暗号化を許可します。
CRYPT_EXPORT
キーのエクスポートを許可します。
CRYPT_EXPORT_KEY
キーのエクスポートにキーを使用できるようにします。
CRYPT_IMPORT_KEY
キーのインポートにキーを使用できるようにします。
CRYPT_MAC
メッセージ認証コード (MAC) をキーと共に使用できるようにします。
CRYPT_READ
値の読み取りを許可します。
CRYPT_WRITE
値の設定を許可します。
 

Digital Signature Standard (DSS) キーが hKey パラメーターで指定されている場合は、dwParam 値を次のいずれかの値に設定することもできます。

価値 意味
KP_P
DSS キーの剰余素数 P を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズがバイト単位で格納されます。
KP_Q
DSS キーの剰余素数 Q を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズがバイト単位で格納されます。
KP_G
DSS キーのジェネレーター G を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズがバイト単位で格納されます。
 

ブロック暗号セッション キーhKey パラメーターで指定されている場合は、dwParam 値を次のいずれかの値に設定することもできます。

価値 意味
KP_EFFECTIVE_KEYLEN
RC2 キーの有効なキー長を取得します。 pbData パラメーターは、有効なキーの長さを受け取る DWORD 値へのポインターです。
KP_IV
キーの初期化ベクトルを取得します。 pbData パラメーターは、初期化ベクトルを受け取る BYTE 配列へのポインターです。 この配列のサイズは、ブロック サイズ (バイト単位) です。 たとえば、ブロック長が 64 ビットの場合、初期化ベクトルは 8 バイトで構成されます。
KP_PADDING
パディング モードを取得します。 pbData パラメーターは、暗号で使用される 埋め込み メソッドを識別する数値識別子を受け取る DWORD 値へのポインターです。 次のいずれかの値を指定できます。
PKCS5_PADDING
PKCS 5 (秒 6.2) 埋め込み方法を指定します。
RANDOM_PADDING
パディングでは乱数が使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
ZERO_PADDING
埋め込みではゼロが使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
KP_MODE
暗号モードのを取得します。 pbData パラメーターは、暗号モード識別子を受け取る DWORD 値へのポインターです。 暗号モードの詳細については、「データの暗号化と復号化の」を参照してください。

現在、次の暗号モード識別子が定義されています。

CRYPT_MODE_CBC
暗号モードは、暗号ブロック チェーンです。
CRYPT_MODE_CFB
暗号モードは、暗号フィードバック (CFB) です。 Microsoft CSP は現在、暗号フィードバック モードで 8 ビット フィードバックのみをサポートしています。
CRYPT_MODE_ECB
暗号モードは、電子コードブックです。
CRYPT_MODE_OFB
暗号モードは、出力フィードバック (OFB) です。 Microsoft CSP は現在、出力フィードバック モードをサポートしていません。
CRYPT_MODE_CTS
暗号モードは、盗みモード 暗号テキスト
KP_MODE_BITS
フィードバックするビット数を取得します。 pbData パラメーターは、OFB または CFB 暗号モードが使用されるときにサイクルごとに処理されるビット数を受け取る、DWORD 値へのポインターです。
 

Diffie-Hellman アルゴリズム または デジタル署名アルゴリズム (DSA) キーが hKey指定されている場合、dwParam 値を次の値に設定することもできます。

価値 意味
KP_VERIFY_PARAMS
Diffie-Hellman アルゴリズムまたは DSA キーのパラメーターを検証します。 pbData パラメーターは使用されず、pdwDataLen 指す値は 0 を受け取ります。

この関数は、キー パラメーターが有効な場合は 0 以外の値を返し、それ以外の場合は 0 を返します。

KP_KEYVAL
この値は使用されません。

Windows Vista、Windows Server 2003、Windows XP: インポートされた Diffie-Hellman アルゴリズムから秘密契約の値 種類のキー CALG_AGREEDKEY_ANY取得します。 pbData パラメーターは、シークレット アグリーメント値を受け取るバッファーのアドレスをリトル エンディアン形式で指定します。 このバッファーは、キーと同じ長さにする必要があります。 dwFlags パラメーターを 0xF42A19B6 に設定する必要があります。 このプロパティは、ローカル システム アカウントで実行されているスレッドによってのみ取得できます。このプロパティは、上記のオペレーティング システムで使用できます。 以降のバージョンでは、変更または使用できない場合があります。

 

hKeyで証明書 指定した場合、dwParam 値を次の値に設定することもできます。

価値 意味
KP_CERTIFICATE
DER でエンコードされた X.509 証明書を含むバッファー。 pbData パラメーターは使用されず、pdwDataLen 指す値は 0 を受け取ります。

この関数は、キー パラメーターが有効な場合は 0 以外の値を返し、それ以外の場合は 0 を返します。

[out] pbData

データを受信するバッファーへのポインター。 このデータの形式は、dwParam値によって異なります。

このバッファーのサイズがわからない場合は、このパラメーターに対して NULL 渡し、pdwDataLen が指す値 ゼロに設定することで、実行時に必要なサイズを取得できます。 この関数は、pdwDataLenが指す値にバッファーの必要なサイズ バイト単位で配置します。 詳細については、「不明な長さのデータの取得」を参照してください。

[in, out] pdwDataLen

pbData パラメーターが指すバッファーのサイズ (バイト単位) を含む、DWORD 値へのポインター。 関数から制御が戻るときに、DWORD 値にはバッファーに格納されているバイト数が含まれます。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さい場合があります。 入力時に、バッファー サイズは、可能な最大の出力データがバッファーに収まるように十分な大きさで指定される場合があります。 出力時に、このパラメーターが指す変数は、バッファーにコピーされたデータの実際のサイズを反映するように更新されます。
 

[in] dwFlags

このパラメーターは将来使用するために予約されており、0 に設定する必要があります。

戻り値

関数が成功した場合、関数は 0 以外の値を返します。

関数が失敗すると、0 が返されます。 拡張エラー情報については、GetLastError呼び出します。

"NTE" で開始されるエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードには、次のようなものがあります。

リターン コード 形容
ERROR_INVALID_HANDLE
パラメーターの 1 つは無効なハンドルを指定します。
ERROR_INVALID_PARAMETER
パラメーターの 1 つに無効な値が含まれています。 これは、多くの場合、無効なポインターです。
ERROR_MORE_DATA
pbData パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数は ERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pdwDataLen指す変数に格納します。
NTE_BAD_FLAGS
dwFlags パラメーターは 0 以外です。
NTE_BAD_KEY またはNTE_NO_KEY
hKey パラメーターで指定されたキーが無効です。
NTE_BAD_TYPE
dwParam パラメーターは、不明な値番号を指定します。
NTE_BAD_UID
キーの作成時に指定された CSP コンテキスト が見つかりません。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

CryptSetKeyParam

キー生成と Exchange 関数の