EncryptMessage (Negotiate) 関数
EncryptMessage (Negotiate) 関数は、プライバシーを提供するためにメッセージを暗号化します。 EncryptMessage (Negotiate) を使用すると、選択したメカニズムでサポートされている 暗号化アルゴリズム の中からアプリケーションを選択できます。 EncryptMessage (Negotiate) 関数は、コンテキスト ハンドルによって参照されるセキュリティ コンテキストを使用します。 一部のパッケージには、暗号化または暗号化解除するメッセージはなく、チェックできる整合性 ハッシュ が提供されます。
Note
EncryptMessage (Negotiate) と DecryptMessage (Negotiate) は、1 つのスレッドが暗号化されていて、もう一方のスレッドが暗号化を解除している場合、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキストの 2 つの異なるスレッドから同時に呼び出すことができます。 複数のスレッドが暗号化されている場合、または複数のスレッドが暗号化を解除している場合、各スレッドは一意のコンテキストを取得する必要があります。
構文
SECURITY_STATUS SEC_Entry EncryptMessage(
_In_ PCtxtHandle phContext,
_In_ ULONG fQOP,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo
);
パラメーター
phContext [in] メッセージの暗号化に使用される セキュリティ コンテキスト へのハンドル。
fQOP [in] 保護の品質を示すパッケージ固有のフラグ。 セキュリティ パッケージでは、このパラメーターを使用して暗号化アルゴリズムの選択を有効にすることができます。
このパラメーターには、次のフラグを指定できます。
値 | 説明 |
---|---|
SECQOP_WRAP_NO_ENCRYPT | ヘッダーまたはトレーラーを生成しますが、メッセージは暗号化しません。 |
Note
KERB_WRAP_NO_ENCRYPTには、同じ値と同じ意味があります。
pMessage [in, out] SecBufferDesc 構造体へのポインター。 入力時に、構造体は、SECBUFFER_DATA型の 1 つ以上の SecBuffer 構造体を参照します。 そのバッファーには、暗号化するメッセージが含まれています。 メッセージは暗号化され、構造体の元の内容が上書きされます。
関数は、SECBUFFER_READONLY属性を使用してバッファーを処理しません。
メッセージを含む SecBuffer 構造体の長さは、QueryContextAttributes (Negotiate) (SECPKG_ATTR_STREAM_SIZES) 関数から取得される cbMaximumMessage を超えてはなりません。
SSL を使用しないアプリケーションでは、SECBUFFER_PADDING型の SecBuffer を指定する必要があります。
MessageSeqNo [in] トランスポート アプリケーションがメッセージに割り当てたシーケンス番号。 トランスポート アプリケーションがシーケンス番号を保持しない場合、このパラメーターは 0 である必要があります。
戻り値
関数が成功した場合、関数はSEC_E_OKを返します。
関数が失敗すると、次のいずれかのエラー コードが返されます。
リターン コード | 説明 |
---|---|
SEC_E_BUFFER_TOO_SMALL | 出力バッファーが小さすぎます。 詳細については、「解説」を参照してください。 |
SEC_E_CONTEXT_EXPIRED | アプリケーションは、既に閉じられているコンテキストを参照しています。 適切に記述されたアプリケーションでは、このエラーを受け取るべきではありません。 |
SEC_E_CRYPTO_SYSTEM_INVALID | セキュリティ コンテキストに対して選択された暗号はサポートされていません。 |
SEC_E_INSUFFICIENT_MEMORY | 要求されたアクションを完了するのに十分なメモリがありません。 |
SEC_E_INVALID_HANDLE | 無効なコンテキスト ハンドルが phContext パラメーターで指定されました。 |
SEC_E_INVALID_TOKEN | SECBUFFER_DATA型バッファーが見つかりませんでした。 |
SEC_E_QOP_NOT_SUPPORTED | 機密性も 整合性 も 、セキュリティ コンテキストではサポートされていません。 |
解説
EncryptMessage (Negotiate) 関数は、メッセージとセキュリティ コンテキストからのセッション キーに基づいてメッセージを暗号化します。
トランスポート アプリケーションがシーケンス検出をサポートする セキュリティ コンテキスト を作成し、呼び出し元がシーケンス番号を指定した場合、関数には暗号化されたメッセージにこの情報が含まれます。 この情報を含めると、メッセージの再生、挿入、抑制から保護されます。 セキュリティ パッケージには、トランスポート アプリケーションから渡されたシーケンス番号が組み込まれています。
Note
これらのバッファーは、示されている順序で指定する必要があります。
バッファーの種類 | 説明 |
---|---|
SECBUFFER_STREAM_HEADER | 内部使用。 初期化は必要ありません。 |
SECBUFFER_DATA | 暗号化する プレーンテキスト メッセージを格納します。 |
SECBUFFER_STREAM_TRAILER | 内部使用。 初期化は必要ありません。 |
SECBUFFER_EMPTY | 内部使用。 初期化は必要ありません。 サイズは 0 にすることができます。 |
最適なパフォーマンスを得るための pMessage 構造体は、連続するメモリから割り当てる必要があります。
Windows XP: この関数は SealMessage とも呼ばれていました。 アプリケーションでは EncryptMessage (ネゴシエート) のみを使用する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ヘッダー | Sspi.h (Security.h を含む) |
ライブラリ | Secur32.lib |
[DLL] | Secur32.dll |