C# 解密字符串时出错

C# 解密字符串时出错,c#,asp.net,encryption,C#,Asp.net,Encryption,我在解密和加密字符串时出错: 5duOH+Tlg5deIrWZiHoNaQ==WVXSL9PFU6A8H14/NLDYBKDZO4XMEC7PQ0CB7MJCDQHSRUM3C7I1FQL1REWBNONU/AYCAJS18ZV7IVQQQU7A==MBJzKMrrrbmc2/vBZSPDkQ==I09Kj25UO+LcmRzgoqTT2g=+FKM9VCGPLEK6EEYEEYETUDKESBCKC07M2FK2 UKCG= 错误如下: 输入不是有效的Base-64字符串,因为它包含非Base

我在解密和加密字符串时出错:

5duOH+Tlg5deIrWZiHoNaQ==WVXSL9PFU6A8H14/NLDYBKDZO4XMEC7PQ0CB7MJCDQHSRUM3C7I1FQL1REWBNONU/AYCAJS18ZV7IVQQQU7A==MBJzKMrrrbmc2/vBZSPDkQ==I09Kj25UO+LcmRzgoqTT2g=+FKM9VCGPLEK6EEYEEYETUDKESBCKC07M2FK2 UKCG=

错误如下:

输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符

我的加密代码是: 公共字符串EncryptQueryString(字符串inputText、字符串key、字符串salt) { 字节[]明文=编码.UTF8.GetBytes(inputText)

解密:

public string DecryptQueryString(string inputText, string key, string salt)
{
    byte[] encryptedData = Convert.FromBase64String(inputText);
    PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));

    using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
    using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
    using (MemoryStream memoryStream = new MemoryStream(encryptedData))
    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
    {
        byte[] plainText = new byte[encryptedData.Length];
        cryptoStream.Read(plainText, 0, plainText.Length);
        string utf8 = Encoding.UTF8.GetString(plainText);
        return utf8;
    }
}

Base64填充由
=
=
组成,因此它看起来像是以某种方式附加在一起的多个Base64字符串。您必须找到它们最初的结束位置,将它们拆分到那里,然后重试


请注意,Base64字符串并不总是有填充,只有在需要时才有填充,因此在此处看不到的地方甚至可能需要中断。

错误似乎是您认为这是一个代码编写服务。错误是什么?您是如何加密字符串的?您是如何尝试解密字符串的?说真的-我们需要更多信息ion!!@AlfieGoodacre当时是一个心理代码编写服务!!我收到了类似“输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、两个以上的填充字符或填充字符中的非法字符。”我假设问题是他对整个加密字符串进行URL编码,这完全是捏造的。听起来他需要在他的解密方法中使用相反的URL解码。不必费心测试它。
public string DecryptQueryString(string inputText, string key, string salt)
{
    byte[] encryptedData = Convert.FromBase64String(inputText);
    PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));

    using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
    using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
    using (MemoryStream memoryStream = new MemoryStream(encryptedData))
    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
    {
        byte[] plainText = new byte[encryptedData.Length];
        cryptoStream.Read(plainText, 0, plainText.Length);
        string utf8 = Encoding.UTF8.GetString(plainText);
        return utf8;
    }
}