C# URL中的加密查询字符串在Outlook中更改为小写
我在注册电子邮件中提供了一个取消按钮,以便用户可以单击链接并取消注册 除了Outlook正在将链接转换为小写外,这一切正常。 因此,当用户单击链接时,我无法解密URL,因为加密的查询字符串现在都是小写的,并且不再有效 如何防止Outlook将链接转换为小写,或者如何提供URL加密且不区分大小写的链接 摘要: domain.com/cancel?qs=YLway3mDMmWMw 正在更改为: domain.com/cancel?qs=ylway3mdmmwmwC# 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正在破坏您的链接,那么您需要使您的链接不受影响。如果必须在链接中保留大写和小写以进行解密,请使用标记字符:
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”方法中,作为标记字符返回原始链接有效负载我最终编写了一种与大小写无关的新加密方法。然而,我将此标记为一个答案,因为它肯定是解决问题的方法。