2017-02-03 1 views
0

Mon problème est qu'avec UWP-Apps je ne peux pas utiliser RSACryptoServiceProvider. Cela signifie que je dois utiliser CryptographicEngine pour en/décrypter des données. Comment puis-je importer ma clé publique/privée à AsymmetricKeyAlgorithmProviderImportKeyPair -Method? Comment dois-je créer le paramètre IBuffer? J'ai deux fichiers Pem ou alternativement xml, un pour Private et un pour Public Key, que je veux utiliser pour en/decryption. Ils sont créés de l'extérieur.AsymmetricKeyAlgorithmProvider Importer

J'ai déjà trouvé une solution avec la classe Rsa de Chilkat. Mais ce n'est pas un freeware malheureusement. Alternatives?

Merci!

Répondre

0

Comment puis-je importer ma clé publique/privée dans la méthode ImportKeyPair de AsymmetricKeyAlgorithmProvider? Comment dois-je créer le paramètre IBuffer?

Sur le serveur, vous pouvez toujours utiliser le RSACryptoServiceProvider général pour renvoyer une clé publique et une clé privée.

System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
rsa.FromXmlString(xmlPrivatelKey); 
byte[] data1 = rsa.ExportCspBlob(false); 
byte[] data2 = rsa.ExportCspBlob(true); 

string pubkey = System.Convert.ToBase64String(data1); 
string privKey = System.Convert.ToBase64String(data2); 

Dans des applications UWP, vous pouvez utiliser AsymmetricKeyAlgorithmProvider pour chiffrer et déchiffrer les données.

public static byte[] Encrypt(byte[] data, string publicKey) 
{ 
    IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length); 
    AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm("RSA_PKCS1"); 
    try 
    { 
     CryptographicKey key = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey); 
     IBuffer encrypted = CryptographicEngine.Encrypt(key, buffer, null); 
     return encrypted.ToArray(); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex.StackTrace); 
     return new byte[0]; 
    } 
} 

public static byte[] Decrypt(byte[] data, string publicKey, string privateKey) 
{ 
    IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length); 

    AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); 
    try 
    { 
     CryptographicKey pubkey = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey); 
     CryptographicKey keyPair2 = asymmetricAlgorithm.ImportKeyPair(CryptographicBuffer.DecodeFromBase64String(privateKey), CryptographicPrivateKeyBlobType.Capi1PrivateKey); 
     IBuffer decrypted = CryptographicEngine.Decrypt(keyPair2, buffer, null); 
     return decrypted.ToArray(); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex.StackTrace); 
     return new byte[0]; 
    } 
} 
+0

Merci, je vais essayer dès que possible! –