0

同じドメイン内の別のユーザー アカウントで実行されている別の asp.net アプリケーションによって復号化される機密データを暗号化する asp.net アプリケーションを作成しています。

DPAPI を使用してキー管理を OS レベルに渡すという記事をたくさん読みました。

このシナリオで DPAPI を使用するにはどうすればよいですか? 暗号鍵をファイルやデータベースに保存したくありません。

4

1 に答える 1

0

System.Security を参照する必要があり、次のようなコードが必要です (これは VB.NET ですが、簡単に C# に移植されています)。

Imports System.Security.Cryptography 

' ....

Dim sensitiveDataBytes() As Byte = Encoding.Unicode.GetBytes(sensitiveData)
Dim entropy As Byte() = Guid.NewGuid().ToByteArray()
Dim encryptedSensitiveDataBytes() As Byte = ProtectedData.Protect(sensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)
Dim entropyPlusSensitiveData As Byte() = entropy.Concat(encryptedSensitiveDataBytes).ToArray()

Return entropyPlusSensitiveData

ここで行っているのはSystem.Security.Cryptography.ProtectedData、「ローカル マシン」スコープでデータを保護するために DPAPI を使用し、暗号化されたデータの先頭に追加するランダムな 16 バイトのエントロピーを作成することです。次に、16 + (暗号化されたデータの長さ) サイズの配列を安全に渡すことができます。

復号化側でも同様のトリックを行います。16 エントロピー バイトを取り除き、DPAPI を使用して復号化します。

Dim entropyPlusSensitiveData As Byte() = data ' the byte array created previously
Dim entropy() As Byte = entropyPlusSensitiveData.Take(16).ToArray()
Dim encryptedSensitiveDataBytes() As Byte = entropyPlusSensitiveData.Skip(16).ToArray()
Dim sensitiveDataBytes() As Byte = ProtectedData.Unprotect(encryptedSensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)

エントロピーは厳密には必須ではありませんが、強くお勧めします。

于 2011-02-11T10:14:47.983 に答える