DecryptMessage (Kerberos) 関数
DecryptMessage (Kerberos) 関数は、メッセージの暗号化を解除します。 一部のパッケージでは、メッセージを暗号化および暗号化解除するのではなく、整合性ハッシュを実行してチェックします。
Note
EncryptMessage (Kerberos) と DecryptMessage (Kerberos) は、1 つのスレッドが暗号化されていて、もう一方のスレッドが暗号化解除している場合、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキストの 2 つの異なるスレッドから同時に呼び出すことができます。 複数のスレッドが暗号化されている場合、または複数のスレッドが暗号化を解除している場合、各スレッドは一意のコンテキストを取得する必要があります。
構文
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
パラメーター
phContext [in]
メッセージの暗号化を解除するために使用される セキュリティ コンテキスト へのハンドル。
pMessage [in, out]
SecBufferDesc 構造体へのポインター。 入力時に、構造体は、SECBUFFER_DATA型である可能性がある 1 つ以上の SecBuffer 構造体を参照します。 バッファーには、暗号化されたメッセージが含まれています。 暗号化されたメッセージは暗号化解除され、バッファーの元の内容が上書きされます。
MessageSeqNo [in]
トランスポート アプリケーションで予期されるシーケンス番号 (存在する場合)。 トランスポート アプリケーションでシーケンス番号が保持されない場合は、このパラメーターを 0 に設定する必要があります。
pfQOP [out]
保護の品質を示すパッケージ固有のフラグを受け取る ULONG 型の変数へのポインター。
このパラメーターには、次のフラグを指定できます。
値 | 説明 |
---|---|
SECQOP_WRAP_NO_ENCRYPT | 彼のメッセージは暗号化されませんでしたが、ヘッダーまたはトレーラーが生成されました。 |
Note
KERB_WRAP_NO_ENCRYPTには、同じ値と同じ意味があります。
戻り値
関数がメッセージが正しいシーケンスで受信されたことを確認すると、関数は SEC_E_OKを返します。
関数がメッセージの暗号化解除に失敗すると、次のいずれかのエラー コードが返されます。
リターン コード | 説明 |
---|---|
SEC_E_INCOMPLETE_MESSAGE | 入力バッファー内のデータが不完全です。 アプリケーションでは、サーバーからさらに多くのデータを読み取り、 DecryptMessage (Kerberos) をもう一度呼び出す必要があります。 |
SEC_E_OUT_OF_SEQUENCE | メッセージが正しい順序で受信されませんでした。 |
解説
アプリケーションがリモート パーティからデータを読み取り、 DecryptMessage (Kerberos) を使用して復号化を試み、 DecryptMessage (Kerberos) が成功したが出力バッファーが空であることを検出することがあります。 これは通常の動作であり、アプリケーションはそれに対処できる必要があります。
GSSAPI との相互運用の詳細については、「 SSPI/Kerberos と GSSAPI の相互運用性」を参照してください。
Windows XP: この関数は UnsealMessage とも呼ばれていました。 アプリケーションでは DecryptMessage (Kerberos) のみを使用する必要があります。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ] |
Header | Sspi.h (Security.h を含む) |
ライブラリ | Secur32.lib |
[DLL] | Secur32.dll |