Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# URL中的加密查询字符串在Outlook中更改为小写_C#_Asp.net_Email_Url_Encryption - Fatal编程技术网

C# URL中的加密查询字符串在Outlook中更改为小写

C# URL中的加密查询字符串在Outlook中更改为小写,c#,asp.net,email,url,encryption,C#,Asp.net,Email,Url,Encryption,我在注册电子邮件中提供了一个取消按钮,以便用户可以单击链接并取消注册 除了Outlook正在将链接转换为小写外,这一切正常。 因此,当用户单击链接时,我无法解密URL,因为加密的查询字符串现在都是小写的,并且不再有效 如何防止Outlook将链接转换为小写,或者如何提供URL加密且不区分大小写的链接 摘要: domain.com/cancel?qs=YLway3mDMmWMw 正在更改为: domain.com/cancel?qs=ylway3mdmmwmw 这会破坏对查询字符串进行解密的能力。

我在注册电子邮件中提供了一个取消按钮,以便用户可以单击链接并取消注册

除了Outlook正在将链接转换为小写外,这一切正常。 因此,当用户单击链接时,我无法解密URL,因为加密的查询字符串现在都是小写的,并且不再有效

如何防止Outlook将链接转换为小写,或者如何提供URL加密且不区分大小写的链接

摘要

domain.com/cancel?qs=YLway3mDMmWMw

正在更改为:

domain.com/cancel?qs=ylway3mdmmwmw


这会破坏对查询字符串进行解密的能力。

如果outlook正在破坏您的链接,那么您需要使您的链接不受影响。如果必须在链接中保留大写和小写以进行解密,请使用标记字符:

  • 生成加密字符串
  • 在每个大写字符之前,插入标记字符(选择加密方案不使用的有效字符)
  • 将新字符串插入链接
  • 若要解密,请在解析字符串时删除所有标记字符,并根据需要设置大小写
  • 如果您觉得阅读代码更容易,下面是一对帮助器方法:

                private static string EncodeCasingIndifference(string originalText, char markerChar)
        {
            StringBuilder sb = new StringBuilder();
    
            foreach(char c in originalText)
            {
                if (char.IsUpper(c))
                    sb.Append(markerChar);
    
                sb.Append(c);
            }
    
            return sb.ToString();
        }
    
        private static string DecodeCasingIndifference(string encryptedText, char markerChar)
        {
            StringBuilder sb = new StringBuilder();
            bool nextCharIsUpper = false;
    
            foreach(char c in encryptedText)
            {
                if(c == markerChar)
                {
                    nextCharIsUpper = true;
                    continue;
                }
    
                if(nextCharIsUpper)
                    sb.Append(char.ToUpperInvariant(c));
                else
                    sb.Append(char.ToLowerInvariant(c));
    
                nextCharIsUpper = c == markerChar;
            }
    
            return sb.ToString();
        }
    
    将原始链接有效负载传递到带有破折号('-')的“enode”方法,作为标记字符返回:
    -Y-Lway3m-D-Mm-W-Mw


    -y-lway3m-d-mn-w-mw
    传递到带有破折号('-')的“decode”方法中,作为标记字符返回原始链接有效负载

    我最终编写了一种与大小写无关的新加密方法。然而,我将此标记为一个答案,因为它肯定是解决问题的方法。