2010-03-05 8 views
7

J'utilise les classes 'RijndaelManaged' et 'CryptoStream' en C# pour chiffrer les fichiers. Avant de chiffrer les fichiers, je veux vérifier si le fichier est déjà chiffré ou non.Comment vérifier si le fichier est chiffré avec AES (Rijndael)

J'ai essayé d'utiliser la méthode File.GetAttributes() pour vérifier le chiffrement mais cela ne fonctionne pas.

J'ai besoin de quelques astuces pour vérifier si le fichier est déjà chiffré ou non.

Répondre

9

Sans aucune sorte d'en-tête personnalisé, la seule façon d'être absolument certain que le fichier est crypté est de tenter de le déchiffrer.

Si vous essayez de compresser le fichier et qu'il devient plus petit, il est extrêmement improbable qu'il soit crypté. S'il y a une distribution non-uniforme des valeurs d'octets (y compris du texte en clair!), Il est peu probable qu'il soit crypté.

Ces heuristiques dépendent de l'exécution correcte du chiffrement. Si AES est appliqué à un fichier un bloc à la fois, alors des patterns peuvent apparaître dans le résultat, mais puisque vous utilisez CryptoStream cela ne devrait pas poser de problème.

Si votre propre code sera toujours utilisé pour crypter et décrypter les fichiers, vous devriez envisager d'ajouter un en-tête personnalisé indiquant qu'il s'agit d'un fichier crypté.

+0

Ajout d'un en-tête personnalisé semble être une bonne idée :) va faire un essai – Mako

0

Si le fichier est chiffré, il apparaîtra sous la forme d'un flux d'octets aléatoires. Vous pouvez:

  • tentative d'ouvrir le fichier et/ou confirmer qu'il est du format attendu (JPG, ZIP, peu importe). Si le fichier correspond à un format connu, alors vous savez qu'il est décrypté.

  • Essayez de déchiffrer le fichier si vous avez la clé, puis répétez l'étape précédente. S'il correspond maintenant à un format connu, alors vous savez qu'il est (était?) Chiffré.

1

Vous avez d'examiner le dossier et rechercher des structures ou des chaînes d'octets qui ne seraient pas là si le fichier est crypté. Vous auriez besoin d'un test distinct pour chaque type de fichier que vous traitez.

5

Supposons que je dispose d'un fichier F contenant cryptogramme X, qui est le chiffreur de Y avec Z. plaintext clé

Je souhaite faire en sorte que le texte en clair Y ne peut être déterminée par quelqu'un qui possède à la fois Z et la clé clé Q. (je peux penser à un certain nombre de raisons pour lesquelles je pourrais vouloir le faire.)

Je souhaite donc chiffrer le fichier déjà crypté avec la clé Q.

Vous me dites que votre système souhaite détecter que F est déjà crypté, puis refuser de le crypter avec la clé Q?

Cela semble être une mauvaise idée. Je pourrais voulez pour crypter le fichier avec la clé Q indépendamment du fait qu'il est déjà crypté avec la clé Z ou non.

+0

Je suis d'accord avec vous que le cryptage multiple est une bonne idée. Mais je voulais juste voir s'il y a un moyen par lequel nous pouvons trouver si un fichier a été chiffré ou non. – Mako

0

Définissez votre type de méthode booléen chiffré, si le fichier peut être décrypté, la méthode renvoie true qui indique que le fichier est chiffré, sinon la méthode renvoie exception et renvoie false indiquant que le fichier ne peut pas être déchiffré pas crypter.

Questions connexes