データの暗号化
次の手順では、基本暗号化関数を使用してメッセージを暗号化する手順について説明します。 PKCS #7 標準を使用してメッセージを暗号化するには、「 低レベルメッセージ関数 」および「 簡易メッセージ関数」を参照してください。
メッセージを暗号化するには
CryptGenKey 関数を使用してセッション キーを生成します。
この呼び出しを行うと、ランダム キーが生成され、ハンドルが返されるため、キーを使用してデータの暗号化と暗号化解除を行うことができます。 この時点で、使用する暗号化アルゴリズムも指定されます。 CryptoAPI では、アプリケーションで公開キー アルゴリズムを使用して一括データを暗号化することは許可されないため、 CryptGenKey 呼び出しで RC2 や RC4 などの対称アルゴリズムを指定します。
または、 CryptDeriveKey 関数を使用して、暗号化に適したキーにパスワードを変換します。
指定したパスワードを持つすべてのユーザーがデータを復号化できるようにアプリケーションでメッセージを暗号化する必要がある場合 は、CryptDeriveKey を使用してパスワードを暗号化に適したキーに変換します。
Note
この場合、この関数は CryptGenKey 関数の代わりに呼び出され、後続の CryptExportKey 呼び出しは必要ありません。
必要に応じて、 CryptSetKeyParam 関数を使用してキーの追加の暗号化プロパティを設定します
キーが生成されたら、キーの追加の暗号化プロパティを CryptSetKeyParamfunction で設定できます。 この関数を使用すると、ファイルのさまざまなセクションを異なるキー塩で暗号化でき、キーの暗号モードまたは初期化ベクトルを変更する方法が提供されます。 これらのパラメーターを使用して、暗号化を特定のデータ暗号化標準に準拠させることができます。
CryptEncrypt 関数を使用してファイル内のデータを暗号化します。
CryptEncrypt 関数は、前の手順で生成されたセッション キーを受け取り、データのバッファーを暗号化します。
Note
データが暗号化されると、暗号化アルゴリズムによってデータが少し拡張される可能性があります。 CryptDecrypt 関数に適切な長さを後で指定できるように、アプリケーションは暗号化されたデータの長さを記憶する役割を担います。
必要に応じて、 CryptExportKey 関数を使用して、現在のユーザーが将来データの暗号化を解除できるようにします。
現在のユーザーが将来データの暗号化を解除できるようにするには、 CryptExportKey 関数を使用して暗号化解除キーを暗号化された形式 (キー BLOB) に保存します。暗号化解除キーは、ユーザーの秘密キーでのみ復号化できます。 この関数では、この目的のためにユーザーのキー交換公開キーが必要です。これは 、CryptGetUserKey 関数を使用して取得できます。 CryptExportKey 関数は、ファイルの暗号化解除に使用するためにアプリケーションで格納する必要があるキー BLOB を返します。
Note
アプリケーションに他のユーザーの証明書 (または公開キー) がある場合、アクセス権を受け取る各ユーザーに 対して CryptExportKey 呼び出しを実行することで、他のユーザーがファイルの暗号化を解除することを許可できます。 返されるキー BLOB は、手順 5 のようにアプリケーションによって格納される必要があります。
暗号化されたメッセージの作成
簡略化されたメッセージ関数により、データの暗号化と暗号化解除が容易になります。 次の図は、メッセージを暗号化するために実行する必要がある個々のタスクを示しています。 手順については、次の一覧で説明します。
メッセージを暗号化するには
- プレーンテキスト メッセージへのポインターを取得します。
- 対称 (セッション) キーを生成します。
- 対称キーと指定された暗号化アルゴリズムを使用して、メッセージ データを暗号化します。
- 証明書ストアを開きます。
- 受信者の証明書を取得します。
- 受信者の証明書から公開キーを取得します。
- 受信者の公開キーを使用して、対称キーを暗号化します。
- 受信者の証明書から受信者の識別子を取得します。
- デジタルエンベロープ メッセージには、データ暗号化アルゴリズム、暗号化されたデータ、暗号化された対称キー、および受信者識別子を含めます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示