Pergunta

Eu tenho que implementar um envelope digital usando AES e RSA, mas estou tendo problemas com a implementação .NET do algoritmo RSA.

Eu consegui criptografar os dados (AES) com a chave simétrica aleatória, mas agora eu tenho para criptografar a chave com RSA.

A chave é um array de bytes (byte[]) e a chave pública que tenho me diz apenas o módulo e o expoente público, ambas as matrizes de bytes (byte[]).

Usando apenas os dois parâmetros, como posso criptografar meu AES chave gerada com RSA?

O código a seguir recupera a mensagem do arquivo e criptografa com AES. Depois, a chave pública é lido a partir do arquivo de chave pública e o módulo eo expoente estão em suas matrizes de bytes apropriadas. Como eu poderia continuar para criptografar o symmetricKey com RSA?

String msgString = Systematic.GetFileContents(messagePath);
Byte[] initVector = new byte[] { 50, 60, 70, 80, 90, 40, 50, 60, 70, 80, 90, 40, 60, 80, 70, 90 };
Byte[] symetricKey = AesCrypt.GenerateRandomKey();
Byte[] encryptedMessage = AesCrypt.Encrypt(msgString, symetricKey, initVector, mode);
Byte[] modulus = null;
Byte[] publicExp = null; 
DataFormatHelper.ReadPublicKey(publicKeyPath, "RSA", ref modulus, ref publicExp);

P.S. Em resposta à rsa.ImportParameters resposta menção: Eu tentei com o rsa.ImportParameters(keyInfo) mas ele lança um CryptographicException ("Bad Data"). E sobre tamanhos de matriz? Actualmente, o módulo é de 128 bytes e o expoente 64 bytes.

Foi útil?

Solução

Usando RSACryptoServiceProvider

static public byte[] RSAEncrypt(byte[] data,
    RSAParameters keyInfo, 
    bool doOAEPPadding)
{
    byte[] encryptedData;
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        //Import the RSA Key information. This only needs
        //toinclude the public key information.
        rsa.ImportParameters(keyInfo);

        //Encrypt the passed byte array and specify OAEP padding.  
        //OAEP padding is only available on Microsoft Windows XP or later.  
        encryptedData = rsa.Encrypt(data, doOAEPPadding);
    }
    return encryptedData;       
}

Então, o que você precisa são os RSAParameters mas tudo que você precisa conjunto são a Modulus eo expoente para criptografar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top