2009-09-29 10 views
3

J'utilise ceci pour le cryptage: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspxPrédire la longueur d'une chaîne cryptée

Est-il possible que je peux prédire ce que le texte chiffré ressemblera? Je convertis la sortie cryptée en texte afin que je puisse la stocker dans la base de données. Je veux juste m'assurer que la taille de la colonne de base de données est assez grande.

Je limite la saisie de texte à 20 caractères.

Répondre

10

Utilisez-vous SQL Server 2005 ou supérieur? Si oui, vous pouvez simplement utiliser VARCHAR(MAX) ou NVARCHAR(MAX) pour le type de colonne.

Si vous voulez être un peu plus précis ...

La taille maximale du bloc pour RijndaelManaged est de 256 bits (32 octets). Votre taille d'entrée maximale est de 20 caractères, donc même si nous supposons que le pire scénario est de 4 octets par caractère, cela ne représentera que 80 octets, qui seront alors complétés jusqu'à un maximum de 96 octets pour le processus de cryptage.

Si vous utilisez le codage Base64 sur la sortie cryptée qui créera 128 caractères à partir des 96 octets cryptés. Si vous utilisez un encodage hexadécimal, cela créera 192 caractères parmi les 96 octets cryptés (plus éventuellement quelques caractères supplémentaires si vous préfixez la chaîne hexadécimale avec "0x"). Dans les deux cas, une largeur de colonne de 200 caractères devrait vous donner plus d'espace libre.

(NB: Ce sont juste à côté de-la-haut de ma tête calculs Je n'ai pas vérifié qu'ils sont en fait correcte.!)

3

Pour un algorithme de chiffrement inconnu aucune information Pour être trouvé en ligne, j'écrirais un petit programme de test qui crypterait un ensemble aléatoire de chaînes de longueur maximum, trouverait la longueur la plus longue dans la sortie, puis multiplierais par un facteur de sécurité basé sur la probabilité de changement de longueur quelle était la précision du résultat du programme d'essai. En réalité, en général, vous allez probablement être dans la plage de longueur d'entrée 1.5x - 2x.

0

Le cryptage n'augmentera jamais la taille des données au-delà du remplissage minimal requis.

S'il "élargit" les données, ce n'est probablement pas un très bon algorithme de chiffrement.

2

Pour cet algorithme spécifique, la longueur du texte chiffré sera,

((length+16)/16)*16 

Ceci pour répondre à la taille du bloc et l'exigence de rembourrage.

Je vous suggère également d'ajouter un IV aléatoire au texte chiffré de sorte que cela prendra 16 autres octets. Cependant, si vous voulez mettre cela comme char dans la base de données, vous devez l'encoder. Cela l'augmentera encore plus.

Pour base64, multipliez-le par 4/3. Pour hex, doublez-le.

+1

Étant donné que le bourrage est de 16 (octets, bits, gigaquads); p – leppie

Questions connexes