2017-02-03 8 views
0

Mein Problem ist, dass mit UWP-Apps kann ich RSACryptoServiceProvider nicht verwenden. Das heißt, ich muss CryptographicEngine verwenden, um Daten zu entschlüsseln. Wie kann ich meinen öffentlichen/privaten Schlüssel zu AsymmetricKeyAlgorithmProvider 's ImportKeyPair -Methode importieren? Wie muss ich den IBuffer-Parameter erstellen? Ich habe zwei Pem oder alternativ Xml-Dateien, eine für Private und eine für Public Key, die ich für en/Entschlüsselung verwenden möchte. Sie sind extern geschaffen.AsymmetricKeyAlgorithmProvider Import

Ich habe bereits eine Lösung mit Chilkat Rsa Klasse gefunden. Aber das ist leider keine Freeware. Alternativen?

Danke!

Antwort

0

Wie kann ich meinen Public/Private Key in die ImportKeyPair-Methode von AsymmetricKeyAlgorithmProvider importieren? Wie muss ich den IBuffer-Parameter erstellen?

Im Server konnten Sie immer noch den allgemeinen RSACryptoServiceProvider verwenden, um den öffentlichen Schlüssel und den privaten Schlüssel zurückzugeben.

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); 

In UWP-Anwendungen, können Sie AsymmetricKeyAlgorithmProvider verwenden, um Daten zu verschlüsseln und zu entschlüsseln.

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

Danke, ich werde so schnell wie möglich versuchen! –

Verwandte Themen