2009-03-26 13 views
3

Je dois utiliser un mécanisme de cryptage dans l'un des projets sur lesquels je travaille. J'explorais le cryptage RSA et écrivais quelques exemples de programmes à apprendre. Je comprends que la taille de bloc du cryptage RSA est de 16 octets. J'ai donc donné la chaîne « 12345678 » comme entrée à la fonction ci-dessous:Taille de données cryptée utilisant le cryptage RSA (RSACryptoServiceProvider)

 
public static string Encrypt (string input) { 
    var byteConverter = new UnicodeEncoding(); 

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider(); 
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false); 
    return BytesToString (output); //BytesToString() converts the bytes to hex string 
} 

Maintenant, la chaîne cryptée que je reçois est de 128 octets (256 caractères hexadécimaux). Cette chaîne est trop grande pour moi. J'espérais que j'obtiendrais 16 octets de données cryptées si je donnais 16 octets de données. Est-ce que je fais quelque chose de mal? Est-ce ce qui est censé arriver? Puis-je en quelque sorte raccourcir les données cryptées?

Répondre

12

Vous vous êtes trompé. RSA n'est pas un chiffrement par bloc, donc vous ne pouvez pas vraiment parler de la taille de bloc de celui-ci.

La sortie d'un cryptage RSA aura la même longueur que le module RSA. Vous n'avez indiqué aucune clé RSA dans votre code, donc le runtime utilisera (autant que je me souvienne) une clé par défaut. Cette clé a apparemment un module de 1024 bits, ce qui explique la longueur de sortie.

Vous pourriez vouloir examiner le cryptage AES à la place. Pour de nombreuses raisons, vous devez normalement utiliser RSA uniquement pour chiffrer une clé, puis utiliser AES ou un algorithme de chiffrement symétrique similaire pour chiffrer votre texte. AES est un chiffrement par bloc avec une taille de bloc de 16 octets, de sorte que (selon le rembourrage que vous utilisez et comment vous transportez votre vecteur d'initialisation) crypter 16 octets de données simples en 16 octets de données chiffrées.