Diskuze: SetDefaultCertificate FindBySerialNumber "Invalid hexadecimal string format"

C# .NET .NET (C# a Visual Basic) SetDefaultCertificate FindBySerialNumber "Invalid hexadecimal string format" American English version English version

Avatar
peter.hudak15:

Zdravím,
pokúšam sa nastaviť certifikát pomocou metódy SetDefaultCer­tificate,

soap.ClientCredentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.CurrentUser,
                    StoreName.AddressBook, X509FindType.FindBySerialNumber, serialNum);

serialNum je string v ktorom je SN certifikátu.
Ak je v tomto stringu uložená tá hodnota ako konštanta t.j.

serialNum = "a1f2d84458f412000000145000000142315"

tak je všetko v pohode a certifikát sa nájde a nastaví.
Ak však ten reťazec priradím z inej premennej ktorá ho načítala zo súboru tak už to nejde a vyhodí výnimku Invalid hexadecimal string format pritom však v debugeri vidím že majú úplne identický obsah.
Ako je to možné? Prosím poraďte ako sa to dá spraviť aby to fungovalo.
Ďakujem

 
Odpovědět 23. března 11:25
Avatar
Odpovídá na peter.hudak15
Libor Šimo (libcosenior):

Dal som tvoj kód do googlu a hneď prvý odkaz:
https://social.msdn.microsoft.com/…tring-format?…
Možno nájdeš riešenie tam.

Nahoru Odpovědět 23. března 13:28
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na peter.hudak15
sadlomaslox25:

nech tam tu konstantu, nacti si serial number ze souboru nebo z kama a tesne pred timhle radkem si dej Console.Write­Line(loadedString == serialNum ); pokud to vypise false tak rozhodne ty stringy nejsou stejny. pokud to vypise true tak napis a podivam se na to protoze to neni mozne :-D

 
Nahoru Odpovědět 23. března 14:30
Avatar
peter.hudak15:

Vďaka za reakciu ale v tom odkaze riešia iný problém, že keď skopíruješ SN certifikátu tak treba vymazať medzery a špeciálny znak.
Je tam asi nejaký problém s kódovaním keďže ten string načítavam s xml súboru.
Nakoniec som to vyriešil prevodom na pole bytov a späť na string v kódovaní UTF8 s orezaním prvého znaku, ktorý sa tam objavil naviac.

byte[] bytes = Encoding.Default.GetBytes(serialNum);
serialNum = Encoding.UTF8.GetString(bytes).Remove(0, 1);
 
Nahoru Odpovědět 23. března 14:36
Avatar
Odpovídá na sadlomaslox25
peter.hudak15:

porovnanie skončí false ale na pohľad sú rovnaké viď obrázok.
teraz som sa stým trochu viac pohral a zistil som, že ani to moje riešenie s orezaním nefunguje vždy, niekedy sa po prevode pridá pred reťazec jeden otáznik, niekedy dva, niekedy tri. Tak neviem čo teda s tým vyriešim.

 
Nahoru Odpovědět 23. března 15:34
Avatar
Odpovídá na peter.hudak15
peter.hudak15:

tak nakoniec som si to prešiel znak po znaku a sú tam na začiatku znaky 0x200E tak som to ošetril aby skopírovalo len použitelné znaky a je to OK.

foreach (char a in serialNum)
{
        if(a<='f')
        serialNum2 += a;
}

PS: ako sa tu da upravit prispevok?

 
Nahoru Odpovědět 23. března 16:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.