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];
}
}
Merci, je vais essayer dès que possible! –