2017-02-03 4 views
0

私の問題は、UWP-AppsではRSACryptoServiceProviderを使用できないということです。つまり、データの暗号化/復号化にはCryptographicEngineを使用する必要があります。公開鍵/秘密鍵をAsymmetricKeyAlgorithmProviderImportKeyPairにインポートするにはどうすればよいですか?どのようにIBufferパラメータを作成する必要がありますか?私は2つのPemまたは代わりにxmlファイルを持っています.1つはプライベート用で、もう1つはパブリックキー用です。これをen/decryptionに使用します。彼らは外部から作られています。AsymmetricKeyAlgorithmProviderインポート

チルカットのRsaクラスのソリューションが見つかりました。しかし、これは残念なことにフリーウェアではありません。代替案?

ありがとうございます!

答えて

0

公開鍵/秘密鍵をAsymmetricKeyAlgorithmProviderのImportKeyPairメソッドにインポートするにはどうすればよいですか?どのようにIBufferパラメータを作成する必要がありますか?

サーバでは、引き続き一般的なRSACryptoServiceProviderを使用して、publickeyとprivatekeyを返すことができます。 UWPアプリで

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

、あなたはデータの暗号化と復号化にAsymmetricKeyAlgorithmProviderを使用することができます。

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

ありがとうございました。 –

関連する問題