解密加密后合并的两个字符串?

时间:2018-03-05 12:08:10

标签: c# encryption

我发现自己需要解密一个字符串,该字符串实际上是两个单独加密的字符串,然后作为单个字符串加入。

For Instance,

当我加密..' foo123'它会返回这样的东西:

  

DPm5OtCV + 6JSyWo1JIo4UQ ==

现在我需要加密另一个字符串..说..' bar321'

让我们说这会返回类似的内容:

  

Z + 0IEvXdmz8q / 6XRU8 / GSQ ==

没问题,我们可以在它们之间来回转换。

但是,我要说我需要将它们解密为单个字符串:

  

DPm5OtCV + 6JSyWo1JIo4UQ == Z + 0IEvXdmz8q / 6XRU8 / GSQ ==

当我尝试这个时,会引发异常:

  

System.FormatException:输入不是有效的Base-64字符串   包含一个非基础64个字符,两个以上的填充字符,或   填充字符中的非法字符。在   System.Convert.FromBase64_ComputeResultLength(Char * inputPtr,Int32   inputLength)在System.Convert.FromBase64CharPtr(Char * inputPtr,   Int32 inputLength)在System.Convert.FromBase64String(String s)
  在

中的AesModule.DecryptStringToString(字符串输入)

使用的代码:

internal void InitializeProviderWithKey(string key, string iv)
{
    try
    {
        m_Aes = new AesCryptoServiceProvider();

        m_Aes.BlockSize = 128;
        m_Aes.KeySize = 256;
        m_Aes.IV = Convert.FromBase64String(iv);
        m_Aes.Key = Convert.FromBase64String(key);
        m_Aes.Mode = CipherMode.CBC;
        m_Aes.Padding = PaddingMode.PKCS7;
    }

    catch(Exception e) { Console.WriteLine(e.ToString()); }
}

internal string EncryptStringToString(string input)
{
    try
    {
        ICryptoTransform transform = m_Aes.CreateEncryptor();

        return Convert.ToBase64String
            (transform.TransformFinalBlock(Encoding.ASCII.GetBytes(input), 0, input.Length));
    }

    catch (Exception e) { Console.WriteLine(e.ToString()); return null; }
}

internal string DecryptStringToString(string input)
{
    try
    {
        ICryptoTransform transform = m_Aes.CreateDecryptor();

        byte[] encoded = Convert.FromBase64String(input);

        return Encoding.ASCII.GetString
            (transform.TransformFinalBlock(encoded, 0, encoded.Length));
    }

    catch(Exception e) { Console.WriteLine(e.ToString()); return null; }
}

这可能吗?

是否有其他密码/填充组合支持此功能?

我的代码有问题吗?

*注意:我尝试用Convert.ToBase64方法替换Encoding.Ascii.GetBytes / GetString。

1 个答案:

答案 0 :(得分:3)

建议:

逗号cannot occur位于有效的base64字符串中。 使用逗号连接加密字符串的各个部分。在解密时,将其再次拆分并逐个将部分提供给解密功能。​​