CryptographicException

CryptographicException

首先,我仅出于学术目的编写了以下代码。我之所以这样说,是因为我没有将其放在生产环境中,因此“绕过”了我本来需要做的一些开销,我只需要能够使用以下命令对字符串进行加密/解密即可下面的代码。我能够做几次,但是由于某种原因,我开始收到“CryptographicException Bad Data”,并且不确定是什么引起了问题。

   private string RSAEncrypt(string value)
    {
        byte[] encryptedData = Encoding.Unicode.GetBytes(value);

        CspParameters cspParams = new CspParameters();
        cspParams.KeyContainerName = _rsaContainerName;
        using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
        {
            encryptedData = RSA.Encrypt(encryptedData, false);
            return Convert.ToBase64String(encryptedData);

        }

    }



    private string RSADecrypt(string value)
    {

        byte[] encryptedData = Encoding.Unicode.GetBytes(value);

        CspParameters cspParams = new CspParameters();
        cspParams.KeyContainerName = _rsaContainerName;
        using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
        {
            encryptedData = RSA.Decrypt(encryptedData,false);
            return Convert.ToBase64String(encryptedData);

        }
    }

它只会在RSADecrypt调用上引发此异常。

有任何想法吗?我在某处读到它可能与传递给RSA.Decrypt的cryptodata的预期大小有关。

谢谢
}

最佳答案

  • 使用字符串编码(即Encoding.Unicode)来回转换明文。
  • 使用Base-64(即Convert.[To/From]Base64String)来回转换加密数据;

  • 像这样:
    private string RSAEncrypt(string value)
    {
        byte[] plaintext = Encoding.Unicode.GetBytes(value);
    
        CspParameters cspParams = new CspParameters();
        cspParams.KeyContainerName = _rsaContainerName;
        using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
        {
            byte[] encryptedData = RSA.Encrypt(plaintext, false);
            return Convert.ToBase64String(encryptedData);
        }
    }
    
    private string RSADecrypt(string value)
    {
        byte[] encryptedData = Convert.FromBase64String(value);
    
        CspParameters cspParams = new CspParameters();
        cspParams.KeyContainerName = _rsaContainerName;
        using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
        {
            byte[] decryptedData = RSA.Decrypt(encryptedData,false);
            return Encoding.Unicode.GetString(decryptedData);
        }
    }
    

    关于c# - "Bad Data"CryptographicException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9659898/

    10-10 10:51