2009-06-13 10 views
2

J'ai une application qui stocke certaines informations dans un état crypté, à la fois sur le fichier et dans une base de données. Comment puis-je calculer quelle sera la longueur du texte de chiffrement résultant sur la base du texte brut? L'opération de chiffrement consiste à utiliser la classe/algorithme .NET RijndaelManaged, puis une conversion en chaîne Base64 avant le stockage. Ce que je veux être en mesure de faire est de savoir à l'avance combien de temps la chaîne chiffrée sera pour une entrée donnée afin que je puisse limiter la longueur de l'entrée en conséquence par rapport à l'espace de stockage disponible pour sa forme cryptée (si ça a du sens!).Comment pré-déterminer la longueur du texte de chiffrement résultant d'une opération de chiffrement?

Merci

Répondre

6

la sortie de Rijndael est la même taille que l'entrée, arrondie au multiple le plus proche de la taille de bloc (habituellement 128 bits, aka 16 octets). Base64 étend son entrée à sa sortie par 4/3 - il faut 4 octets de sortie pour représenter chaque 3 octets d'entrée. Donc si vous avez par exemple une entrée de 70 octets, l'étape de cryptage produira 80 octets de sortie (le multiple le plus proche de 16 c'est> 70), Base64 le transformera en 108 (81/3 fois 4).

+0

Excellent, merci! –

+2

Si vous utilisez PKCS7Padding (que vous utilisez probablement), l'étape de cryptage étendra la longueur du multiple _strictly_larger_ le plus proche. Par exemple. 64 octets deviendront 80 octets. Vous le savez probablement, mais dans votre exemple, vous écrivez "(multiple le plus proche de 16 c'est> = 70)" plutôt que "(multiple le plus proche de 16 c'est> 70)". –

+0

@Rasmus, excellent point, merci - mon> = était l'un de ces vilains "off par un" des erreurs :-(. Modification réponse maintenant ... merci encore! –

1

Le texte chiffré sera la première taille de bloc de chiffrement supérieure à votre texte. Vous vérifiez votre propriété Algorithme BlockSize. Le codage Pure Base64 augmente la sortie d'un tiers, mais cela peut varier si vous avez également besoin d'une URL d'échappement (pourcentage d'encodage) de certains symboles Base64 (comme '+' et '/').

Questions connexes