BCryptDecrypt 関数 (bcrypt.h)

BCryptDecrypt 関数は、データブロックを復号化します。

構文

NTSTATUS BCryptDecrypt(
  [in, out]           BCRYPT_KEY_HANDLE hKey,
  [in]                PUCHAR            pbInput,
  [in]                ULONG             cbInput,
  [in, optional]      VOID              *pPaddingInfo,
  [in, out, optional] PUCHAR            pbIV,
  [in]                ULONG             cbIV,
  [out, optional]     PUCHAR            pbOutput,
  [in]                ULONG             cbOutput,
  [out]               ULONG             *pcbResult,
  [in]                ULONG             dwFlags
);

パラメーター

[in, out] hKey

データの暗号化を解除するために使用するキーのハンドル。 このハンドルは、 BCryptGenerateSymmetricKeyBCryptGenerateKeyPairBCryptImportKey などのキー作成関数のいずれかから取得されます。

[in] pbInput

暗号化を解除する暗号テキストを含むバッファーのアドレス。 cbInput パラメーターには、復号化する暗号テキストのサイズが含まれています。 詳細については、「解説」を参照してください。

[in] cbInput

復号化する pbInput バッファー内のバイト数。

[in, optional] pPaddingInfo

埋め込み情報を含む構造体へのポインター。 このパラメーターは、非対称キーと認証された暗号化モードでのみ使用されます。 認証された暗号化モードを使用する場合、このパラメーターは BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 構造を指す必要があります。 非対称キーを使用する場合、このパラメーターが指す構造体の種類は dwFlags パラメーターの値によって決まります。 それ以外の場合は、パラメーターを NULL に設定する必要があります。

[in, out, optional] pbIV

暗号化解除時に使用する 初期化ベクトル (IV) を含むバッファーのアドレス。 cbIV パラメーターには、このバッファーのサイズが含まれています。 この関数は、このバッファーの内容を変更します。 後で IV を再利用する必要がある場合は、この関数を呼び出す前に、必ずこのバッファーのコピーを作成してください。

このパラメーターは省略可能であり、IV が使用されていない場合は NULL にすることができます

IV の必要なサイズは、 BCryptGetProperty 関数を呼び出して BCRYPT_BLOCK_LENGTH プロパティを取得することで取得できます。 これにより、アルゴリズムのブロックのサイズが提供されます。これは IV のサイズでもあります。

[in] cbIV

pbIV バッファーのサイズ (バイト単位)。

[out, optional] pbOutput

この関数によって生成されるプレーンテキストを受け取るバッファーのアドレス。 cbOutput パラメーターには、このバッファーのサイズが含まれています。 詳細については、「解説」を参照してください。

このパラメーターが NULL の場合、 BCryptDecrypt 関数は pbInput パラメーターで渡される暗号化されたデータのプレーンテキストに必要なサイズを計算します。 この場合、 pcbResult パラメーターが指す場所にはこのサイズが含まれており、関数は STATUS_SUCCESSを返します。

pbOutput パラメーターと pbInput パラメーターの両方の値が NULL の場合、認証された暗号化アルゴリズムが使用されていない限り、エラーが返されます。 後者の場合、呼び出しは長さ 0 のデータを持つ認証された暗号化呼び出しとして扱われ、 pPaddingInfo パラメーターで渡された認証タグが検証されます。

[in] cbOutput

pbOutput バッファーのサイズ (バイト単位)。 pbOutput パラメーターが NULL の場合、このパラメーターは無視されます。

[out] pcbResult

pbOutput バッファーにコピーされたバイト数を受け取る ULONG 変数へのポインター。 pbOutputNULL の場合、プレーンテキストに必要なサイズ (バイト単位) を受け取ります。

[in] dwFlags

この関数の動作を変更するフラグのセット。 許可されるフラグのセットは、 hKey パラメーターで指定されたキーの種類によって異なります。

キーが対称キーの場合は、0 または次の値を指定できます。

意味
BCRYPT_BLOCK_PADDING
データが暗号化されたときに、次のブロック サイズに埋め込まれた。 このフラグが BCryptEncrypt 関数と共に使用された場合は、この関数でも指定する必要があります。 このフラグは、認証された暗号化モード (AES-CCM および AES-GCM) では使用しないでください。
 

キーが非対称キーの場合は、次のいずれかの値を指定できます。

意味
BCRYPT_PAD_NONE
パディングは使用しないでください。 pPaddingInfo パラメーターは使用されません。 cbInput パラメーターは、アルゴリズムのブロック サイズの倍数である必要があります。

ブロック サイズは、 BCryptGetProperty 関数を呼び出してキーの BCRYPT_BLOCK_LENGTH プロパティを取得することで取得できます。 これにより、アルゴリズムのブロックのサイズが提供されます。

BCRYPT_PAD_OAEP
データが暗号化されたときに、最適非対称暗号化パディング (OAEP) スキームが使用されました。 pPaddingInfo パラメーターは、BCRYPT_OAEP_PADDING_INFO構造体へのポインターです。
BCRYPT_PAD_PKCS1
データが暗号化されたときに、データに乱数が埋め込まれた。 pPaddingInfo パラメーターは使用されません。

戻り値

関数の成功または失敗を示す状態コードを返します。

可能なリターン コードには、次のものが含まれますが、これらに限定されません。

リターン コード 説明
STATUS_SUCCESS
関数は成功しました。
STATUS_AUTH_TAG_MISMATCH
計算された認証タグが 、pPaddingInfo パラメーターで指定された値と一致しませんでした。
STATUS_BUFFER_TOO_SMALL
cbOutput パラメーターで指定されたサイズは、暗号テキストを保持するのに十分な大きさではありません。
STATUS_INVALID_BUFFER_SIZE
cbInput パラメーターはアルゴリズムのブロック サイズの倍数ではなく、BCRYPT_BLOCK_PADDING フラグが dwFlags パラメーターで指定されていません。
STATUS_INVALID_HANDLE
hKey パラメーターのキー ハンドルが無効です。
STATUS_INVALID_PARAMETER
1 つ以上のパラメーターが無効です。
STATUS_NOT_SUPPORTED
このアルゴリズムでは、暗号化解除はサポートされていません。

解説

pbInput パラメーターと pbOutput パラメーターは等しい場合があります。 この場合、この関数は暗号化解除を実行します。 pbInputpbOutput が等しくない場合、2 つのバッファーが重複しない可能性があります。

プロバイダーがサポートするプロセッサ モードに応じて、 BCryptDecrypt はユーザー モードまたはカーネル モードから呼び出すことができます。 カーネル モードの呼び出し元は、PASSIVE_LEVEL IRQL または IRQL DISPATCH_LEVELで実行できます。 現在の IRQL レベルが DISPATCH_LEVELされている場合、 hKey パラメーターで提供されるハンドルは、 BCRYPT_PROV_DISPATCH フラグで開かれたプロバイダーによって返されるアルゴリズム ハンドルから派生する必要があります。 また、BCryptDecrypt 関数に渡されるすべてのポインターは、非ページ (またはロックされた) メモリを参照する必要があります。

カーネル モードでこの関数を呼び出すには、ドライバー開発キット (DDK) の一部である Cng.lib を使用します。 Windows Server 2008 と Windows Vista: カーネル モードでこの関数を呼び出すには、Ksecdd.lib を使用します。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー bcrypt.h
Library Bcrypt.lib
[DLL] Bcrypt.dll

関連項目

BCryptEncrypt