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