Dans le programme .NET, créez un nouveau RSACryptoServiceProvider
. Exportez la clé publique en tant que RSAParameters
et enregistrez les valeurs Modulus
et Exponent
sur le disque. Comme ceci:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(4096); //4096 bit key
RSAParameters par = rsa.ExportParameters(false); // export the public key
File.WriteAllBytes(@"C:\modulus.bin", par.Modulus); // write the modulus and the exponent to disk
File.WriteAllBytes(@"C:\exponent.bin", par.Exponent);
Sur le côté C, vous aurez besoin de lire les valeurs de module et exposant à partir du disque les convertissent en BIGNUM
valeurs. Ces valeurs seront chargées dans une clé RSA, puis vous pouvez chiffrer le texte brut et écrire le texte chiffré sur le disque. Comme ceci:
RSA * key;
unsigned char *modulus;
unsigned char *exp;
FILE * fp = fopen("c:\\modulus.bin", "rb"); // Read the modulus from disk
modulus = new unsigned char[512];
memset(modulus, 0, 512);
fread(modulus, 512, 1, fp);
fclose(fp);
fp = fopen("c:\\exponent.bin", "rb"); // Read the exponent from disk
exp = new unsigned char[3];
memset(exp, 0, 3);
fread(exp, 3, 1, fp);
fclose(fp);
BIGNUM * bn_mod = NULL;
BIGNUM * bn_exp = NULL;
bn_mod = BN_bin2bn(modulus, 512, NULL); // Convert both values to BIGNUM
bn_exp = BN_bin2bn(exp, 3, NULL);
key = RSA_new(); // Create a new RSA key
key->n = bn_mod; // Assign in the values
key->e = bn_exp;
key->d = NULL;
key->p = NULL;
key->q = NULL;
int maxSize = RSA_size(key); // Find the length of the cipher text
cipher = new char[valid];
memset(cipher, 0, valid);
RSA_public_encrypt(strlen(plain), plain, cipher, key, RSA_PKCS1_PADDING); // Encrypt plaintext
fp = fopen("C:\\cipher.bin", "wb"); // write ciphertext to disk
fwrite(cipher, 512, 1, fp);
fclose(fp);
Enfin, vous pouvez prendre le texte chiffré et le décrypter en C# sans aucune difficulté.
byte[] cipher = File.ReadAllBytes(@"c:\cipher.bin"); // Read ciphertext from file
byte[] plain = rsa.Decrypt(cipher, false); // Decrypt ciphertext
Console.WriteLine(ASCIIEncoding.ASCII.GetString(plain)); // Decode and display plain text
Salut, Comment décrypter cela en C++ en utilisant la clé privée ?? Merci –