为什么我的加密方法无法处理Base-64字符串我需要转换它吗?

时间:2016-10-19 11:48:36

标签: c# cryptography aes

我有这种AES算法来加密和解密字符串。 如果我尝试解密1个字母/字符,它的工作正常 但是一旦它超过1并且可能超过20个字符,它就会开始向我发出这个错误。

  

附加信息:输入不是有效的Base-64字符串   包含一个非基础64个字符,两个以上的填充字符,或   填充字符中的非法字符。

我是AES加密/解密的新手,所以我之前从未遇到过此错误。如何以及如何转换为Convert.ToBase64String()

当我按下解密按钮时,这一切都会发生。

这条线给我的错误就是这个byte[] encryptedBytes = Convert.FromBase64String(encrypted);

以下是加密字符串zg1Y3w6pPSoYW36q8nR7iQ==gDY7P3Kg6jxWM/bn0N+f6Q==x8FfbeOUwSxqYkokfFtY8Q==4iycn+vyY6UN9Y99k4aljg==N//H6vUxhIboleXlETNj9A==V017IsPvKRmJcn8GH9W+Vg==NZNjLcLJZTkyXGhh3E6mNw==hmnbcfZdVXPU04ywXR3nWQ==SU5RemiwkhpqTAai6/OQOw==p/2GA7NdspZDt6G/RPR9yQ==8l83Pv/2ZQLkHE/4iKYyOA==cSJ+0Um4s160QPDn/pueYw==J+Wxf9fR8MyHTg0FzpurvQ==ufke4Nlwkwb2V6PNdMCPtg==NKeRkuObfma9PdktTiy/AA==tv1JTHMelvuUIzGjZmLEdA==CO3qyFFDu20kMhU8MwE42w==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==N//H6vUxhIboleXlETNj9A==

的示例
private const string constKey = "qMvdN091nWru1aUG";
private static string IV = "asdfghjkliyt52g6";




private void encryptButton_Click(object sender, RoutedEventArgs e)
{
    string encryptthis = Encrypt(texttoencrypt.Text);
    encryptedtext.Text = encryptthis;
}

private static string Encrypt(string text)
{
    byte[] plaintextBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
    AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
    aes.BlockSize = 128;
    aes.KeySize = 256;
    aes.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(constKey);
    aes.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV);
    aes.Padding = PaddingMode.PKCS7;
    aes.Mode = CipherMode.CBC;
    ICryptoTransform crypto = aes.CreateEncryptor(aes.Key, aes.IV);
    byte[] encrypted = crypto.TransformFinalBlock(plaintextBytes, 0, plaintextBytes.Length);
    return Convert.ToBase64String(encrypted);
}

private static string Decrypt(string encrypted)
{
    byte[] encryptedBytes = Convert.FromBase64String(encrypted);
    AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
    aes.BlockSize = 128;
    aes.KeySize = 256;
    aes.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(constKey);
    aes.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV);
    aes.Padding = PaddingMode.PKCS7;
    aes.Mode = CipherMode.CBC;
    ICryptoTransform crypto = aes.CreateDecryptor(aes.Key, aes.IV);
    byte[] secret = crypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
    crypto.Dispose();
    return System.Text.ASCIIEncoding.ASCII.GetString(secret);

}

0 个答案:

没有答案