我发现自己需要解密一个字符串,该字符串实际上是两个单独加密的字符串,然后作为单个字符串加入。
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。