将两个字符串与==进行比较时的奇怪行为

时间:2014-08-07 09:58:28

标签: c#

在将两个字符串与==进行比较时,我发现了一种奇怪的行为。 一点上下文:以下代码来自应该充当服务器的应用程序,它应该验证clientcertificate的指纹。

我的客户端应用程序带有以下指纹的证书:" 2074529C99D93D5955FEECA859AEAC6092741205"。当我调用服务器时,此方法返回Valid:

static CertificateValidationResult ValidateClientCertificate(X509Certificate2 clientcertificate)
{
    return clientcertificate.Thumbprint == "‎2074529C99D93D5955FEECA859AEAC6092741205"
                       ? CertificateValidationResult.Valid
                       : CertificateValidationResult.Rejected;
}

用指纹" F9A021D2EFDCD3BD13671CE1D25CFE51BA5BA38E"更改为客户证书后并更改了服务器代码,以下方法返回Rejected:

static CertificateValidationResult ValidateClientCertificate(X509Certificate2 clientcertificate)
{
    return clientcertificate.Thumbprint == "‎F9A021D2EFDCD3BD13671CE1D25CFE51BA5BA38E"
                       ? CertificateValidationResult.Valid
                       : CertificateValidationResult.Rejected;
}

在每种情况下,字符串都完全相同,但只返回第一个有效字符串。为什么会这样?

1 个答案:

答案 0 :(得分:2)

如果您复制/粘贴了指纹,则可能意外复制了隐藏的字符/符号。即使启用“显示空白”,这些也不会出现在Visual Studio IDE中。这可能会导致您目睹的各种奇怪的副作用。

最好的方法是手动将指纹输入到Visual Studio中,这将确保没有滑稽的角色滑入。这可能有点痛苦,但保证你的唯一方法实际上是比较喜欢。