我在注册邮箱中提供了一个取消按钮,以便用户点击该链接并取消注册。
除了Outlook将链接转换为小写之外,这种方法很好。 因此,当用户单击该链接时,我无法解密该URL,因为加密的查询字符串现在全部小写且更长有效。
我该怎么做才能阻止Outlook将链接转换为小写,或者如何提供URL加密且不区分大小写的链接?
摘要:
domain.com/cancel?qs=的 YLway3mDMmWMw
正在变为:
domain.com/cancel?qs=的 ylway3mdmmwmw
打破了解密查询字符串的能力。
答案 0 :(得分:1)
如果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
传递给"解码"带短划线的方法(' - ')作为标记字符返回原始链接有效负载