URL 中的加密查询字符串在 Outlook 中更改为小写
本文关键字:Outlook 加密 查询 字符串 URL | 更新日期: 2023-09-27 17:55:49
我在注册电子邮件中提供了一个"取消"按钮,以便用户可以单击链接并取消注册。
这工作正常,除了 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
传递到"解码"方法中,并使用破折号 ('-') 作为标记字符返回原始链接有效负载