NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: SetDefaultCertificate FindBySerialNumber "Invalid hexadecimal string format"

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
peter.hudak15:23.3.2016 11:25

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.3.2016 11:25
Avatar
Odpovídá na peter.hudak15
Libor Šimo (libcosenior):23.3.2016 13:28

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.3.2016 13:28
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na peter.hudak15
sadlomaslox25:23.3.2016 14:30

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.3.2016 14:30
Avatar
peter.hudak15:23.3.2016 14:36

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.3.2016 14:36
Avatar
Odpovídá na sadlomaslox25
peter.hudak15:23.3.2016 15:34

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.3.2016 15:34
Avatar
Odpovídá na peter.hudak15
peter.hudak15:23.3.2016 16:03

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.3.2016 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.