2012-06-13 82 views
1

我需要解密最初在不再可用的帳戶下創建的連接。使用DataProtection.DataProtector加密/解密c#

爲了做到這一點我做了一個簡單的應用程序:

private void btnEncrypt_Click(object sender, EventArgs e) 
    {    
     DataProtection.DataProtector dp = new DataProtection.DataProtector(DataProtection.DataProtector.Store.USE_MACHINE_STORE); 
     try 
     { 
      byte[] dbToEncrypt = Encoding.ASCII.GetBytes(txtText.Text); 
      string resultEncrypted = Convert.ToBase64String(dp.Encrypt(dbToEncrypt, null)); 
      txtEncrypt.Text = resultEncrypted;     
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
    } 
private void btnDecrypt_Click(object sender, EventArgs e) 
    {    
     DataProtection.DataProtector dp = new DataProtection.DataProtector(DataProtection.DataProtector.Store.USE_MACHINE_STORE); 
     try 
     { 
      byte[] dbToDecrypt = Convert.FromBase64String(txtEncrypt.Text); 
      string resultDecrypted = Encoding.ASCII.GetString(dp.Decrypt(dbToDecrypt, null)); 
      txtDecrypt.Text = resultDecrypted; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
    } 

現在,我已經注意到,當我在我的電腦測試,並試圖解密加密的結果在不同的電腦,我得到:

異常解密。解密失敗。密鑰在 特定狀態下無效。

於是,我做了一些研究,發現了這一點:

你從一臺服務器的密鑰導出到其他所以他們都 設置相同?如果不是,則使用不匹配的密鑰,這將導致加密/解密錯誤。

,我可以在這裏找到鑰匙:

如何得到的validationKey值和decryptionkey價值?

解密密鑰可以在這裏找到 「d:\ Documents和Settings \所有 用戶\應用數據\微軟\加密\ RSA \ MachineKeys的」

所以我的問題是:如果我從我的計算機中導出那個位置的密鑰,我想解密這些數據的密鑰會起作用嗎?並通過出口的意思只是複製密鑰文件或做另一個操作?

回答

1

AFAIK這是不可能的 - 無論如何是不可取的。 DPAPI定期創建新的密鑰,因此即使您可以在機器之間複製密鑰,它們在一段時間後也會過時。

如果要解密多臺計算機上的數據,請使用其他方法(例如, RSA。

+0

感謝您的幫助Joe – Somebody