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

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字符串中。使用逗号连接加密字符串的各个部分。在解密时,将其再次拆分并逐个将部件提供给解密功能。

以上是关于解密加密后组合的两个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

RSA+AES请求组合加密

用C语言2. 编写栅栏密码算法加密、解密编码程序。。求急啊

JAVA如何对URL进行加密和解密啊

在Java中生成和使用两个密钥进行加密和解密

密码加密和解密

java密码加密与解密