使用DataProtection.DataProtector加密/解密c#

时间:2012-06-13 19:15:41

标签: c# encryption data-protection

我需要解密最初在不再可用的帐户下创建的连接。

为了做到这一点,我做了一个简单的应用程序:

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 and Settings \ All”中找到     用户\应用程序数据\ Microsoft \ Crypto \ RSA \ MachineKeys“

  

所以我的问题是:如果我从我的计算机中导出该位置的密钥,那么我要解密数据的那个会起作用吗?并通过导出意味着只需复制密钥文件或进行其他操作?

1 个答案:

答案 0 :(得分:1)

AFAIK这是不可能的 - 在任何情况下都是不可取的。 DPAPI会定期创建新密钥,因此即使您可以在计算机之间复制密钥,它们也会在一段时间后过时。

如果要在多台计算机上解密数据,请使用其他方法,例如: RSA。