2011-02-11 23 views
0

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

私は、DPAPIを使用してキー管理をOSレベルに渡すと言っている多くの記事を読んでいます。

このシナリオでDPAPIを使用するにはどうすればよいですか?私は暗号鍵をファイルやデータベースに格納したくない。あなたが(それはVB.NETだが、それは、C#に自明移植です)System.Securityを参照して、このようなコードを持っている必要があります

答えて

0

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) 

エントロピーは必須ではありませんが、それは非常にお勧めします。

関連する問題