c# - "Bad Data"加密异常

标签 c# encryption cryptography rsa

首先,我只是出于学术目的编写了以下代码。我这样说的原因是因为我没有把它放在生产环境中,因此我“绕过了”一些我需要做的开销,我只需要能够使用加密/解密字符串下面的代码。我能够做到几次,但由于某种原因,我开始收到“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 的加密数据的预期大小有关。

谢谢

最佳答案

  • 使用字符串编码(即 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"加密异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659898/

相关文章:

go - 如何在 Go 中使用密码创建 RSA 私钥?

c# - 我丢失了 Visual Studio C# 2008 的设计 View

c# - 如何为使用 visual studio Installer 创建的安装项目的桌面快捷方式设置图标?

c# - 检查对象是否是通用集合

delphi - 使用 Delphi 组件加密文件并使用其他实用程序解密

javascript - 坚持在 javascript 中实现 HMAC

c# - 如何创建表达式树来执行类似于 SQL "Like "命令的操作

php - 如何使用 TripleDES 加密与 Node.js 和 PHP-mcrypt 获得相同的结果?

C: 无法解密 Openssl 消息

cryptography - RSA 和素数生成器算法