Mystery
Mystery

Reputation: 155

Strange behaviour when comparing two strings with ==

I have observed a strange behaviour when comparing two strings with ==. A little bit of context: The following code is from an application which should act as server and it should validate the thumbprint of the clientcertificate.

I have a client application with a certificate with the following thumbprint: "2074529C99D93D5955FEECA859AEAC6092741205". When I call the server this method returns Valid:

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

After I changed to a clientcertificate with the thumbprint "‎F9A021D2EFDCD3BD13671CE1D25CFE51BA5BA38E" and changed the server code the following method returns Rejected:

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

In each case the strings are exactly the same, but only the first one returned Valid. Why is this happening?

Upvotes: 1

Views: 102

Answers (1)

Belogix
Belogix

Reputation: 8147

If you copied / pasted the Thumbprint you may have accidentally copied a hidden character / symbol. Often these don't appear in the Visual Studio IDE even if you enable "Show Whitespace". This can cause all sorts of strange side-effects as you have witnessed.

The best approach is to manually type out the thumbprint into Visual Studio which will ensure no funny characters have slipped in. This can be a bit of a pain but the only way of guaranteeing you are actually comparing like for like.

Upvotes: 2

Related Questions