c # - Signaturverifikation med ECDSA på UWP

Indlæg af Hanne Mølgaard Plasc

Problem



Vi forsøger at bekræfte en underskrift på en UWP-applikation. Vi har den offentlige nøgle og den private nøgle.


Vi har en server med den private nøgle, der signerer en besked, og en klient, der verificerer signaturen med den offentlige nøgle eller certifikatet.


En applikation kan potentielt kommunikere med hundredvis af disse serverenheder på en dag. Hver server har en anden privat nøgle.


Denne kode fungerer godt i Java, til Android, med den offentlige nøgle.


Det virker med certifikatet for iOS.


Men vi kan ikke få det til at fungere i .NET til UWP. Det problem, vi har, er, at enten nøglen ikke importeres, hvilket resulterer i et programnedbrud eller signaturen er forkert. Vi forsøgte flere verifikationsmåder (RSACryptoServiceProvider, X509Certificate, X509Certificate2, AsymmetricKeyAlgorithmProvider, PersistedKeyProvider) men ingen af ​​dem fungerer.


Koden til at importere en offentlig nøgle i Java er som følger


private static PublicKey getPublicKeyFromString(String keystr) throws Exception {
    // Remove the first and last lines

    String pubKeyPEM = keystr.replace("-----BEGIN PUBLIC KEY-----
", "");
    pubKeyPEM = pubKeyPEM.replace("-----END PUBLIC KEY-----", "");

    // Base64 decode the data
    byte[] encoded = Base64.getDecoder().decode(pubKeyPEM);
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);
    KeyFactory kf = KeyFactory.getInstance("EC");
    return kf.generatePublic(keySpec);
}


Er der en måde at få det til at fungere med UWP?

Bedste reference