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

本文关键字:Outlook 加密 查询 字符串 URL | 更新日期: 2023-09-27 17:55:49

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

这工作正常,除了 Outlook 将链接转换为小写。因此,当用户单击链接时,我无法解密 URL,因为加密的查询字符串现在全部小写且有效期更长。

我可以执行哪些操作来防止 Outlook 将链接转换为小写,或者如何提供 URL 加密且不区分大小写的链接?

总结

domain.com/cancel?qs=YLway3mDMmWMw

将更改为:

domain.com/cancel?qs=ylway3mdmmwmw

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

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

如果 Outlook 正在破坏您的链接,那么您需要使您的链接大小写无动于衷。如果绝对必须在链接中保留大写和小写以进行解密,请使用标记字符:

  1. 生成加密字符串。
  2. 在每个大写字符之前,插入标记字符(选择加密方案不使用的有效字符)。
  3. 将新字符串插入到链接中。
  4. 若要解密,请在分析字符串时删除所有标记字符,并根据需要设置为大写/小写。
下面是

一对帮助程序方法,如果您发现阅读代码更容易:

            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传递到"解码"方法中,并使用破折号 ('-') 作为标记字符返回原始链接有效负载