次の方法で共有


EncryptMessage (NTLM) 関数

EncryptMessage (NTLM) 関数は、プライバシーを提供するためにメッセージを暗号化しますEncryptMessage (NTLM) を使用すると、選択したメカニズムでサポートされている 暗号化アルゴリズム の中からアプリケーションを選択できます。 EncryptMessage (NTLM) 関数は、コンテキスト ハンドルによって参照されるセキュリティ コンテキストを使用します。 一部のパッケージには、暗号化または暗号化解除するメッセージはありませんが、チェックできる整合性 ハッシュ が提供されます。

注意

EncryptMessage (NTLM)DecryptMessage (NTLM) は、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
ヘッダーまたはトレーラーを生成しますが、メッセージは暗号化しません。
メモ: KERB_WRAP_NO_ENCRYPTは同じ値を持ち、同じ意味を持ちます。

pMessage [in, out]

SecBufferDesc 構造体へのポインター。 入力時に、構造体は、SECBUFFER_DATA型の 1 つ以上の SecBuffer 構造体を参照します。 そのバッファーには、暗号化するメッセージが含まれています。 メッセージは暗号化され、構造体の元の内容が上書きされます。

関数は、SECBUFFER_READONLY属性を持つバッファーを処理しません。

メッセージを含む SecBuffer 構造体の長さは、QueryContextAttributes (NTLM) (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 (NTLM) 関数は、メッセージとセキュリティ コンテキストからのセッション キーに基づいてメッセージを暗号化します。

トランスポート アプリケーションがシーケンス検出をサポートする セキュリティ コンテキスト を作成し、呼び出し元がシーケンス番号を提供する場合、関数には暗号化されたメッセージにこの情報が含まれます。 この情報を含めると、メッセージの再生、挿入、抑制から保護されます。 セキュリティ パッケージには、トランスポート アプリケーションから渡されたシーケンス番号が組み込まれています。

注意

これらのバッファーは、示されている順序で指定する必要があります。

バッファーの種類 説明
SECBUFFER_STREAM_HEADER 内部使用。 初期化は必要ありません。
SECBUFFER_DATA 暗号化する プレーンテキスト メッセージが含まれます。
SECBUFFER_STREAM_TRAILER 内部使用。 初期化は必要ありません。
SECBUFFER_EMPTY 内部使用。 初期化は必要ありません。 サイズは 0 にすることができます。

最適なパフォーマンスを得るには、 pMessage 構造体を連続するメモリから割り当てる必要があります。

Windows XP: この関数は 、SealMessage とも呼ばれます。 アプリケーションでは EncryptMessage (NTLM) のみを使用する必要があります。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
ヘッダー Sspi.h (Security.h を含む)
ライブラリ Secur32.lib
[DLL] Secur32.dll

関連項目