¿Cómo utilizar una clave RSA privada manual para el cifrado en C#?

programación


Estoy intentando cifrar una cadena usando el algoritmo RSA usando la biblioteca integrada de C#
System.Net.Cryptograhy.RSACryptoServiceProvider.

Supongamos que tengo una clave privada (por ejemplo):

`  -- -- - BEGIN RSA PRIVATE KEY-- -- -
  MIICXQIBAAKBgQCFf3jKXbhn2GOiCzvAxLTmZ34BdFQyNDKt / 7 B3qQ1thmSPG / NK
nrYG8OIHhDqIsGkT1YcEOQKEHPhgmtGj78Fxrv3AEi56VsYfJUTOJn9GTmqPrpk /
  zscIiD5HkWzx8JfOQS5uPHWwGmQpYftDod82nYinlwuZdAVOcz3 + 7 dShlQIDAQAB
AoGAT2sCJQGUTtMAkso0Bf3 / 0 IIJCDx4SlWbQMA37zf28Q1ejXSHTAEXMRHkpawY
VnD8UfxZkj2ILag + atovlWNwpJ + Qgw4 + t3KvPXEQB1LtMDa0q1fA + I3qU / 5 uiOCq
07 y1IWfhJ6UsfhXYV5gOmADeVrwnuGz6YUIBLQ6at3ebHgECQQDPo + 0 UUFC9z6ZX
x2a6UNIFZB9YPmxy599GMjOQOf3tEYH + qn6tYz9oZu7cWrQzkoEJ7Uw7xQsqXADU
ekfaL2f1AkEApJb6G4 + zB8gCWQy6DrqiK4Y6d1CN3s67uuZXMcpQEuju9jNBHwAj
g8zdwNAf98dksRyt7XICROrxv5i7mvFvIQJAPau5eaQVJxsqk720xDfG + TTwnlwE
B + jYhtfYOskOoz / k9UecUlE8 / vw7i5UhGoQz8UfasZHnrBAhavpapvIXlQJBAIPE
q2 + tV / N + 2 QJaAgsQuAyIZf5n62zZrcov5tbh1cGN4uIQnq4m + kfmmBJpjW5dn + t7
vnM + tzpdrjVqHagqaoECQQCAZl + BLRqEQa9cKH5lpJ4k9L + 3 sX4LQjuwNkFyZTr /
  K6Tw5lZv4eBDWtlYToEL3mtgLR7BKEled5cHCZ6pr1nm
  -- -- - END RSA PRIVATE KEY-- -- -`

Y quiero usar esta clave privada para cifrar la cadena.

He visto la mayoría de ejemplos en Internet como estos.

C#
`string data = "ABC";

RSACryptoServiceProvider crypto = new RSACryptoServiceProvider();

string cipherText = Encrypt(data, rsaCryptoServiceProvider.ExportParameters(false));

public static string Encrypt(string data, RSAParameters key) {

    using(var rsa = new RSACryptoServiceProvider()) {
        rsa.FromXmlString(PrivateKey);
        rsa.ImportParameters(key);
        var byteData = Encoding.UTF8.GetBytes(data);
        var encryptData = rsa.Encrypt(byteData, false);
        return Convert.ToBase64String(encryptData);
        }
    }`

Pero en este método no estoy usando la clave privada proporcionada.

¿Alguien puede ayudar con el cifrado utilizando la clave privada proporcionada?

Espero obtener el texto cifrado adecuado de mi clave privada.

Gracias de antemano. Se agradece cualquier ayuda.

Lo que he probado:

he probado esto

C#
`string data = "ABC";

RSACryptoServiceProvider crypto = new RSACryptoServiceProvider();

string cipherText = Encrypt(data, rsaCryptoServiceProvider.ExportParameters(false));

public static string Encrypt(string data, RSAParameters key) {

    using(var rsa = new RSACryptoServiceProvider()) {
        
        rsa.ImportParameters(key);
        var byteData = Encoding.UTF8.GetBytes(data);
        var encryptData = rsa.Encrypt(byteData, false);
        return Convert.ToBase64String(encryptData);
        }
    }` 

Solución 1

Intente comenzar aquí: Cifrado de clave privada RSA[^]

Solución 2

public string GetEncryptValue(long connectionNumber)
       {

           long creditCardNumber = (connectionNumber);
           string publicKey = ConfigSettings.GetMobikwickEncrypKey();
           string encryptedCreditCard = EncryptWithRSA(creditCardNumber, publicKey);



           byte[] encryptedBytes = Convert.FromBase64String(encryptedCreditCard);
           string decryptedData = Encoding.UTF8.GetString(encryptedBytes);

           return encryptedCreditCard;
       }

static string EncryptWithRSA(long dataToEncrypt, string publicKey)
       {
           try
           {

               RSAParameters rsaParameters = GetRSAParametersFromKey(publicKey);

               using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
               {

                   //byte[] x509Key = ExportX509Key(rsaParameters);
                   //rsa.ImportCspBlob(x509Key);
                   rsa.ImportParameters(rsaParameters);
                   byte[] dataBytes = BitConverter.GetBytes(dataToEncrypt);
                   Array.Resize(ref dataBytes, 8);
                   byte[] encryptedData = rsa.Encrypt(dataBytes, false);
                   string encryptedBase64 = Convert.ToBase64String(encryptedData);


                   return encryptedBase64;
               }
           }
           catch (Exception ex)
           {
               Console.WriteLine("Encryption failed: " + ex.Message);
           }

           return "";
       }

static RSAParameters GetRSAParametersFromKey(string publicKeyValue)
      {
          byte[] modulusBytes = Encoding.UTF8.GetBytes(publicKeyValue);
          Array.Resize(ref modulusBytes, 256);
          byte[] exponentBytes = { 1, 0, 1 };

          RSAParameters rsaParameters = new RSAParameters
          {
              Modulus = modulusBytes,
              Exponent = exponentBytes
          };

          return rsaParameters;
      }

コメント

タイトルとURLをコピーしました