次の方法で共有


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

関連項目