C# 解密字符串时出错
我在解密和加密字符串时出错: 5duOH+Tlg5deIrWZiHoNaQ==WVXSL9PFU6A8H14/NLDYBKDZO4XMEC7PQ0CB7MJCDQHSRUM3C7I1FQL1REWBNONU/AYCAJS18ZV7IVQQQU7A==MBJzKMrrrbmc2/vBZSPDkQ==I09Kj25UO+LcmRzgoqTT2g=+FKM9VCGPLEK6EEYEEYETUDKESBCKC07M2FK2 UKCG= 错误如下: 输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符 我的加密代码是: 公共字符串EncryptQueryString(字符串inputText、字符串key、字符串salt) { 字节[]明文=编码.UTF8.GetBytes(inputText) 解密:C# 解密字符串时出错,c#,asp.net,encryption,C#,Asp.net,Encryption,我在解密和加密字符串时出错: 5duOH+Tlg5deIrWZiHoNaQ==WVXSL9PFU6A8H14/NLDYBKDZO4XMEC7PQ0CB7MJCDQHSRUM3C7I1FQL1REWBNONU/AYCAJS18ZV7IVQQQU7A==MBJzKMrrrbmc2/vBZSPDkQ==I09Kj25UO+LcmRzgoqTT2g=+FKM9VCGPLEK6EEYEEYETUDKESBCKC07M2FK2 UKCG= 错误如下: 输入不是有效的Base-64字符串,因为它包含非Base
public string DecryptQueryString(string inputText, string key, string salt)
{
byte[] encryptedData = Convert.FromBase64String(inputText);
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));
using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
using (MemoryStream memoryStream = new MemoryStream(encryptedData))
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
byte[] plainText = new byte[encryptedData.Length];
cryptoStream.Read(plainText, 0, plainText.Length);
string utf8 = Encoding.UTF8.GetString(plainText);
return utf8;
}
}
Base64填充由
=
或=
组成,因此它看起来像是以某种方式附加在一起的多个Base64字符串。您必须找到它们最初的结束位置,将它们拆分到那里,然后重试
请注意,Base64字符串并不总是有填充,只有在需要时才有填充,因此在此处看不到的地方甚至可能需要中断。错误似乎是您认为这是一个代码编写服务。错误是什么?您是如何加密字符串的?您是如何尝试解密字符串的?说真的-我们需要更多信息ion!!@AlfieGoodacre当时是一个心理代码编写服务!!我收到了类似“输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、两个以上的填充字符或填充字符中的非法字符。”我假设问题是他对整个加密字符串进行URL编码,这完全是捏造的。听起来他需要在他的解密方法中使用相反的URL解码。不必费心测试它。
public string DecryptQueryString(string inputText, string key, string salt)
{
byte[] encryptedData = Convert.FromBase64String(inputText);
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));
using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
using (MemoryStream memoryStream = new MemoryStream(encryptedData))
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
byte[] plainText = new byte[encryptedData.Length];
cryptoStream.Read(plainText, 0, plainText.Length);
string utf8 = Encoding.UTF8.GetString(plainText);
return utf8;
}
}