Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解密问题时Base-64字符数组的长度无效_C#_Asp.net Mvc - Fatal编程技术网

C# 解密问题时Base-64字符数组的长度无效

C# 解密问题时Base-64字符数组的长度无效,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个非常奇怪的问题,不知道是什么原因造成的 今天早上,一位客户给我发了一封电子邮件,告诉我一些客户在尝试查看其网站时出现错误,他也出现了错误,但当他再次尝试时,它成功了 查看日志,错误是Chrome65和67,我使用67,没有得到错误 下面是加密的查询字符串,它从未对客户有效,但对我有效: 一个8岁的学生,一个8岁,一个8岁,一个8岁,一个8岁,一个2岁,一个2岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁

我有一个非常奇怪的问题,不知道是什么原因造成的

今天早上,一位客户给我发了一封电子邮件,告诉我一些客户在尝试查看其网站时出现错误,他也出现了错误,但当他再次尝试时,它成功了

查看日志,错误是Chrome65和67,我使用67,没有得到错误

下面是加密的查询字符串,它从未对客户有效,但对我有效:

一个8岁的学生,一个8岁,一个8岁,一个8岁,一个8岁,一个2岁,一个2岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个8岁,一个AAAAAA级,一个A级,一个A级,一个,一个A级,一个A级,一个,一个,一个AA级,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个GXQAZHOITEBPGOKD1TSBNV4PRMUFKVLOGYO0H9LNF24联邦NSP30AACWTnRmVac71%2BCAAMANROCUIHUUMID0I8P75KV0ZLURBYOZASHW9I7ICVxWDBI2N0MqdOgDvZeti%2bYz

下面是我的代码,我希望问题在于此,但由于有些客户有问题,有些没有,我不会屏住呼吸

var encrtptUserId = EncryptionDecryption.WindowsEncrypted(encryptQueryParameters);

string urlToValidateUser = $"{baseUrl}?id={HttpUtility.UrlEncode(encrtptUserId)}";

public static string WindowsEncrypted(string text)
{
    return Convert.ToBase64String(ProtectedData.Protect(Encoding.Unicode.GetBytes(text), null, DataProtectionScope.LocalMachine));
}

public static string WindowsDecrypted(string text)
{
    return Encoding.Unicode.GetString(ProtectedData.Unprotect(Convert.FromBase64String(text), null, DataProtectionScope.LocalMachine));            
}
导致问题的是解密,但并非总是如此


任何帮助都将不胜感激。

查询字符串包括编码值,例如“%2b”。那至少不方便

您可以将这些值解码为原始的base64值,然后将其转换回字节数组。但最好首先使用web安全的base64编码

Convert.ToBase64String
不提供URL安全的方法,但您可以轻松地对结果使用
Replace

public static string WindowsEncrypted(string text)
{
    byte[] plainBinary= Encoding.Unicode.GetBytes(text);
    byte[] encrypted = ProtectedData.Protect(plainBinary, null, DataProtectionScope.LocalMachine);
    string base64 = Convert.ToBase64String(encrypted);
    // Return a url-safe string
    return base64.Replace("+", "-").Replace("/", "_").Replace("=", ".");
}

public static string WindowsDecrypted(string text)
{
    string base64 = text.Replace("-", "+").Replace("_", "/").Replace(".", "=");
    byte[] encrypted = Convert.FromBase64String(base64);
    byte[] plainBinary = ProtectedData.Unprotect(encrypted, null, DataProtectionScope.LocalMachine);
    return Encoding.Unicode.GetString(plainBinary);
}

Base64不是加密,而是编码。另外,所有那些
%
都不属于那里,看起来它是先被URL编码的。@Barterichs:Base64不是加密,但我怀疑
ProtectedData.Protect
是。嗨,Daisy,你说的是正确的ProtectedData.Protect是加密,它真的是文本字符串还是字节数据?在对%2b和%2f字符进行URL解码之后,我刚刚尝试了解码,我看到了非ASCII数据,这对于字符串数据类型来说是个问题,因为它可能包含字符串终止字符以及其他不友好的字符串字符。