2011-01-28 164 views
8

我從來沒有使用加密庫,但我想用私鑰加密一個字符串,並用公鑰解密。如何在C#中實現這一點。請用小代碼片段幫助我。 謝謝如何使用私鑰加密字符串並使用公鑰解密?

+1

你不應該加密與RSA任意的字符串。您應該使用RSA加密隨機生成的**正確填充的**對稱密鑰。 – CodesInChaos 2011-01-28 16:15:24

+1

@CodeInChaos:我同意這是RSA在大部分時間都在使用的東西,但是使用RSA並不限於此。 – 2011-01-28 17:21:44

回答

10

AFAIK,儘管公鑰和私鑰在數學上沒有技術上的差異,但是出於安全原因,您需要一致地使用它們。

您要求使用私鑰進行加密並使用公鑰進行解密。這通常是錯誤的。如果你想要走這個方向,通常是一個名爲「數字簽名」的操作。

如果用私有密鑰,使得它是由公鑰可逆的簽字,那麼它是不是一個真正的祕密。我假設你只是試圖從發件人合法地認證郵件。您需要的是數字簽名 - 仍然使用公鑰 - 私鑰(或「不對稱」)密鑰執行。

對於數字簽名,消息本身並不是祕密的(因爲任何擁有公鑰的人都可以解密它),但是伴隨着基於消息的附加數據,這些數據可以使用公鑰進行驗證,並且可以只能由具有匹配私鑰的人計算。

它看起來像下面這樣。現在你只需要弄清楚你會得到鑰匙的位置。

static byte[] GenerateDigitalSignature(byte[] data, RSAParameters asymmetricKey) 
{ 
    using (var rcsp = new RSACryptoServiceProvider()) 
    using (var cp = new SHA1CryptoServiceProvider()) 
    { 
    rcsp.ImportParameters(asymmetricKey); 

    return rcsp.SignData(data, cp); 
    } 
} 
相關問題