gpt4 book ai didi

c# - 解码/解密期间 Base-64 字符数组的长度无效

转载 作者:可可西里 更新时间:2023-11-01 08:22:14 27 4
gpt4 key购买 nike

问:我面临以下大问题:

我不时发现以下异常:

Base-64 字符数组的长度无效

我使用加密和解密:

public static string Encrypt(string text)
{

try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
Byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memoryStream.ToArray());
}

catch (Exception ex)
{
string message = ex.Message;
}

return string.Empty;
}



public static string Decrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
text = text.Replace(" ", "+")
Byte[] byteArray = Convert.FromBase64String(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}

catch (Exception ex)
{
string message = ex.Message;

}

我读了很多关于这个问题的文章一些谈论解决方案的帖子是:

text = text.Replace("", "+")这根本无法解决我的问题

我的字符串是:3DZF/NZpp0yuQ=3D我需要帮助来解决这个问题。

编辑

  • 如果有任何修改或增强这个类,使之工作得更好或更安全或避免像这样的任何可能的问题,我将不胜感激。
  • 如果有交替类而不是这个,更多安全,不做这些问题,我将不胜感激。
  • 我在一个小类(class)中使用这个类(class)用于验证邮件的应用程序。

编辑:

Decoding the querystring values is done already when it's parsed into the Request.

https://stackoverflow.com/a/10879400/418343

最佳答案

要解决您需要对所有准备好的 encode-base64 字符串进行编码然后解码的问题,具体取决于您使用它的位置。

例如,如果您在 url(或查询)上使用它,而这可能是您要使用的地方,那么您需要在使用之前对 URL 进行编码,在取回之前对 url 进行解码。原因是您需要避免将 URL 用作代码字符的相同字符与加密字符混合使用。

无论如何,这是解决您问题的代码(我出于同样的原因使用):

public static string encodeSTROnUrl(string thisEncode)
{
if (null == thisEncode)
return string.Empty;

return HttpUtility.UrlEncode(Encrypt(thisEncode));
}


public static string decodeSTROnUrl(string thisDecode)
{
return Decrypt(HttpUtility.UrlDecode(thisDecode));
}

附言我有同样的问题,并尝试按照您所说的替换“+”和其他,但最后这就是它起作用的原因。

不要忘记从您的代码中删除 text = text.Replace("", "+") 和其他加密操作,只需加密和解密即可。

关于c# - 解码/解密期间 Base-64 字符数组的长度无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com