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

时间:2015-06-13 14:15:34

标签: c# asp.net email url encryption

我在注册邮箱中提供了一个取消按钮,以便用户点击该链接并取消注册。

除了Outlook将链接转换为小写之外,这种方法很好。 因此,当用户单击该链接时,我无法解密该URL,因为加密的查询字符串现在全部小写且更长有效。

我该怎么做才能阻止Outlook将链接转换为小写,或者如何提供URL加密且不区分大小写的链接?

摘要

  

domain.com/cancel?qs=的 YLway3mDMmWMw

正在变为:

  

domain.com/cancel?qs=的 ylway3mdmmwmw

打破了解密查询字符串的能力。

1 个答案:

答案 0 :(得分:1)

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

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

                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传递给"解码"带短划线的方法(' - ')作为标记字符返回原始链接有效负载