解密加密后组合的两个字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解密加密后组合的两个字符串?相关的知识,希望对你有一定的参考价值。
我发现自己需要解密一个字符串,该字符串实际上是两个单独加密的字符串,然后作为单个字符串加入。
例如,
当我加密..'foo123'时,它将返回如下内容:
DPm5OtCV + 6JSyWo1JIo4UQ ==
现在我有另一个我需要加密的字符串..说..'bar321'
让我们说这会返回类似于:
Z + 0IEvXdmz8q / 6XRU8 / GSQ ==
没问题,我们可以单独在它们之间来回转换。
但是,假设我需要将它们解密为单个字符串:
DPm5OtCV 6JSyWo1JIo4UQ == + Z + 0IEvXdmz8q / 6XRU8 / GSQ ==
当我尝试这个时,它抛出一个异常:
System.FormatException:输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。 System.Convert.FvertBase64String(String s)中System.Convert.FromBase64CharPtr(Char * inputPtr,Int32 inputLength)的System.Convert.FromBase64_ComputeResultLength(Char * inputPtr,Int32 inputLength) 在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。
一条建议:
逗号cannot occur在有效的base64字符串中。使用逗号连接加密字符串的各个部分。在解密时,将其再次拆分并逐个将部件提供给解密功能。
以上是关于解密加密后组合的两个字符串?的主要内容,如果未能解决你的问题,请参考以下文章