次の方法で共有


EncryptMessage (全般) 関数

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

ダイジェスト セキュリティ サポート プロバイダー (SSP) を使用する場合、この関数は SASL メカニズムとしてのみ使用できます。

Schannel SSP を使用する場合、この関数は、メッセージを受信するリモート パーティとネゴシエートされた セッション キー を使用してメッセージを暗号化します。 暗号化アルゴリズムは、使用中の [暗号 スイート](暗号 suites-in-schannel.md) によって決定されます。

注意

EncryptMessage (General)DecryptMessage (General) は、1 つのスレッドが暗号化されていて、もう一方のスレッドが暗号化解除されている場合、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキストの 2 つの異なるスレッドから同時に呼び出すことができます。 複数のスレッドが暗号化されている場合、または複数のスレッドが暗号化を解除している場合、各スレッドは一意のコンテキストを取得する必要があります。

特定の SSP でこの関数を使用する方法については、次のトピックを参照してください。

トピック 説明
EncryptMessage (ダイジェスト) ダイジェストを使用してプライバシーを提供するメッセージを暗号化します。
EncryptMessage (Kerberos) Kerberos を使用してプライバシーを提供するメッセージを暗号化します。
EncryptMessage (ネゴシエート) ネゴシエートを使用して、メッセージを暗号化してプライバシーを提供します。
EncryptMessage (NTLM) NTLM を使用してプライバシーを提供するメッセージを暗号化します。
EncryptMessage (Schannel) Schannel を使用してプライバシーを提供するメッセージを暗号化します。

構文

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

パラメーター

phContext [in]

メッセージの暗号化に使用する セキュリティ コンテキスト のハンドル。

fQOP [in]

保護の品質を示すパッケージ固有のフラグ。 セキュリティ パッケージでは、このパラメーターを使用して、暗号化アルゴリズムの選択を有効にすることができます。

Digest SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。

このパラメーターには、次のいずれかのフラグを指定できます。

意味
SECQOP_WRAP_NO_ENCRYPT
ヘッダーまたはトレーラーを生成しますが、メッセージは暗号化しません。
メモ: KERB_WRAP_NO_ENCRYPTは同じ値を持ち、同じ意味を持ちます。
SECQOP_WRAP_OOB_DATA
Schannel アラート メッセージを送信します。 この場合、 pMessage パラメーターには標準の 2 バイト SSL/TLS イベント コードが含まれている必要があります。 この値は、Schannel SSP でのみサポートされます。

pMessage [in, out]

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

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

メッセージを含む SecBuffer 構造体の長さは、QueryContextAttributes (General) (SECPKG_ATTR_STREAM_SIZES) 関数から取得される cbMaximumMessage を超えてはなりません。

Digest SSP を使用する場合は、 署名 情報を保持するために、SECBUFFER_PADDING型またはSEC_BUFFER_DATAの 2 番目のバッファーが必要です。 出力バッファーのサイズを取得するには、 QueryContextAttributes (General) 関数を呼び出し、SECPKG_ATTR_SIZESを指定します。 関数は 、SecPkgContext_Sizes 構造体を返します。 出力バッファーのサイズは、 cbMaxSignature メンバーと cbBlockSize メンバーの値の合計です。

SSL を使用しないアプリケーションでは、SECBUFFER_PADDING型の SecBuffer を指定する必要があります。

MessageSeqNo [in]

トランスポート アプリケーションがメッセージに割り当てたシーケンス番号。 トランスポート アプリケーションがシーケンス番号を保持しない場合、このパラメーターは 0 である必要があります。

Digest SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。 ダイジェスト SSP は、内部的にシーケンス番号を管理します。

Schannel SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。 Schannel SSP はシーケンス番号を使用しません。

戻り値

関数が成功した場合、関数は 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 (General) 関数は、メッセージとセキュリティ コンテキストからのセッション キーに基づいてメッセージを暗号化します。

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

Digest SSP を使用する場合は、 QueryContextAttributes (General) 関数を呼び出し、SECPKG_ATTR_SIZESを指定することで、出力バッファーのサイズを取得します。 関数は 、SecPkgContext_Sizes 構造体を返します。 出力バッファーのサイズは、 cbMaxSignature メンバーと cbBlockSize メンバーの値の合計です。

Schannel SSP と共に使用する場合、 pMessage パラメーターには、次のバッファーを含む SecBufferDesc 構造体が含まれている必要があります。

注意

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

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

Schannel SSP を使用する場合は、 QueryContextAttributes (General) 関数を呼び出し、SECPKG_ATTR_STREAM_SIZES属性を指定して、各バッファーの最大サイズを決定します。 この関数はヘッダー (cbHeader メンバー)、メッセージ (cbMaximumMessage メンバー)、およびトレーラー (cbTrailer メンバー) バッファーの最大サイズをメンバーに含むSecPkgContext_StreamSizes構造体返します。

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

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

要件

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

関連項目