2012-06-01 82 views
3

我是密碼學的新手。我讀過對稱和非對稱算法分別使用一個和兩個加密密鑰。這些密鑰必須存儲在安全的地方。但是當我在網上搜索關於如何在asp.net中進行加密的教程時,我發現了一些奇怪的東西!例如this tutorial加密密鑰的存儲位置在哪裏?

加密或解密數據時沒有存儲或提供公鑰或私鑰!我無法理解。

我的另一個問題是,我發現的所有教程直到現在只是代碼沒有任何解釋這些代碼是什麼以及爲什麼使用。我很欣賞任何好的教程建議。

回答

5

RSACryptoServiceProvider Constructor

如果沒有發現默認密鑰,將創建一個新的密鑰。

此構造函數創建一個適用於加密會話密鑰的Exchange密鑰對,以便它們可以安全地存儲並與其他用戶交換。生成的密鑰對應於使用非託管Microsoft Cryptographic API(CAPI)中使用的AT_KEYEXCHANGE值生成的密鑰。

所以它只是生成一個新的密鑰對,如果它找不到一個已經創建;除了基於會話的數據之外,您不應該使用這個。

一些背景知識(我假設你使用的是Windows),非對稱密鑰對與證書相關聯的。這些證書是您用來放置非對稱密鑰的信任。每個證書都可以由證書頒發機構(誰是發佈非對稱密鑰的權威人員)簽署,如果您信任證書頒發機構,則您信任屬於由該頒發機構簽署的證書的非對稱密鑰。所有這些證書都存儲在「證書存儲」中,即「密鑰存儲」(Java),「密鑰環」(Mac)。

您可以通過執行Start > Run > certmgr.msc查看您的證書。您的證書在個人>證書下。如果您打開一個,然後轉至Certificate Path選項卡,您將看到證書鏈直至證書頒發機構。如果在您的Trusted Root Certification Authorities > Certificates商店中找到屬於證書頒發機構的「根」證書,則該證書被認爲是有效且可信的。

如果你想加密某個用戶的東西,你應該進入他的證書存儲區,並取出他的加密證書。要做到這一點,你應該打開「當前用戶的」密鑰存儲區,並遍歷所有的證書,並選擇密鑰用法「密鑰加密」,如果不止一個,詢問用戶的他想用。

如果要使用服務帳戶(例如,如果您是Web服務器)對某些內容進行加密,則應該使用「本地計算機」密鑰存儲區中找到的證書,並且只授予您的服務帳戶對私鑰的讀取訪問權限與您要使用的證書相關聯。

這可以通過使用X509Store Class來完成,例如:

X509Store certificateStore = new X509Store("MY", StoreLocation.CurrentUser); 
X509Certificate2Collection allCertificates = certificateStore.Certificates; 
//Iterate through all certificates 

「MY」 代表個人證書,其餘的都可以找到here。 CurrentUser代表用戶密鑰,另一個選項是LocalMachine。

一旦您擁有要使用的證書,您應該使用公鑰加密,並使用私鑰解密,並配合使用對稱密鑰。所以,如果你有一個大的數據集,你想加密,你會做的是:

  1. 獲取證書
  2. 拉離證書
  3. 生成對稱密鑰(AES)
  4. 對數據進行加密的公鑰使用對稱密鑰
  5. 使用公鑰加密對稱密鑰
  6. 存儲使用加密數據的加密對稱密鑰以及用於加密的證書的標識符(序列號)

當你解密你應該:

  1. 閱讀從加密的數據
  2. 拉證書,從密鑰存儲,與序列號
  3. 序列號拉私鑰出該證書的
  4. 使用該私鑰解密對稱密鑰
  5. 使用該對稱密鑰解密數據
  6. 使用da ta

我有一堆代碼示例,如果您想查看一下,請告訴我您需要幫助的部分。

這可能有點令人困惑,所以讓我知道你想澄清什麼。

+1

謝謝你,很好的解釋,回答了我的問題。但是你的意思是「你不應該使用這個以外的基於會話的數據。」 ?不使用新的密鑰或RSACryptoServiceProvider本身?你可以建議任何好的教程,並在密碼學的詳細解釋在asp.net?我真的需要一個真實的世界,而不是一個在控制檯主要功能中都可以完成的示例。 –

+3

@reza當你在沒有指定鍵的情況下對一個RSACryptoServiceProvider對象進行實例化時,它會生成一次性的鍵,在會話完成後(對象被放置),這些鍵不會被存儲在任何地方。我不確定任何優秀的在線教程,但我可能會有一些東西。你想要加密哪種數據? –

+1

我想加密用戶個人數據,除了用戶自己以外,任何人都不應該看到這些數據。這是一個共享主機。沒有訪問服務器。無法加密數據庫服務器中的數據。不知道在哪裏保存私鑰。但我知道我想使用對稱加密使用AES算法,因爲加密和解密都在同一個應用程序中完成 –