2012-07-10 5 views
3

Je n'arrive pas à trouver une source pour les différences. J'ai trouvé cette différence dans cet outil de décryptage en ligneQuelle est la différence entre Blowfish et Blowfish-compat?

http://www.tools4noobs.com/online_tools/decrypt/

J'ai quelques données chiffrées Blowfish que je suis en train de déchiffrer à travers le module PyCrypto de Python. Le problème, cependant, est que les données semblent être cryptées avec "blowfish-compat", car c'est ce qu'il faut pour le déchiffrer à travers l'outil en ligne; Je ne peux pas le décrypter à travers le module de PyCrypto, et je pense qu'il utilise strictement le décryptage de Blowfish (et non pas Blowfish-compat, quel qu'il soit).

Est-il possible de décrypter Blowfish-compat par Python en quelque sorte? Je ne connais pas les différences entre les deux.

Répondre

5

bonne question. il semble être quelque chose de spécifique au programme mcrypt/libmcrypt.

je ne pouvais trouver aucune docs alors j'ai regardé à la source pour libmcrypt. qui contient deux modules, un pour blowfish, et un pour blowfish-compat. quand je regarde ceux-ci, la seule différence que je peux voir (avertissement: je suis un ingénieur logiciel, mais pas un spécialiste crypto) est que la logique pour l'ordre des octets est permutée (ifdef WORDS_BIGENDIAN est remplacé par ifndef WORDS_BIGENDIAN - notez le "n").

donc je suppose qu'il est pour décoder des données sur les machines big-endian ENCODEES sur des machines peu endian, ou vice-versa. ou peut-être y a-t-il une convention que le code devrait suivre sur l'endianness, mais certaines bibliothèques le cassent, et ceci compense.

mise à jour aha! et sachant que, googling pour "blowfish-compat big-endian" se présente ce qui ressemble à une confirmation. voir http://www.spinics.net/lists/crypto/msg00175.html - qui traite d'une implémentation incorrecte qui a inversé la commande. Donc, en bref, vos données ont été incorrectement codées. le mode "compat" reproduit le bug afin qu'ils puissent être décodés.

étant donné que, il semble que vous êtes à court de-chance sur le front de python, sauf si vous pouvez trouver une interface python pour Mcrypt. http://labix.org/python-mcrypt semble que cela pourrait fonctionner (page pypi - http://pypi.python.org/pypi/python-mcrypt).

(ce qui était l'une des réponses les plus amusantes à fournir depuis longtemps: o)

oh, et je me suis la source de http://sourceforge.net/projects/mcrypt/ en suivant le lien « Parcourir tous les fichiers » sous le bouton de téléchargement (le bouton téléchargements mcrypt, pas libmcrypt).

+0

Des trucs géniaux, merci! J'avais failli abandonner tout espoir et j'étais sur le point de réécrire en PHP, mais vous avez sauvé la journée! Gloire! – Coldblackice

+3

Votre réponse est précise: Cependant, il y a un peu d'espoir pour tout le monde utilisant pycrypto: Vous pouvez "émuler" blowfish-compat en inversant l'ordre des octets (4 octets) avant le cryptage et encore sur le résultat du cryptage. Un exemple est ce commit https://github.com/pyropeter/otrtool/commit/4282fbee1643ed2b37ae48c510619b2617a34bf1 –

+0

Ce code d'émulation ne fonctionne pas si bien si vous utilisez un mode comme CTR. Comme si vous avez 1234 il renvoie 4321 mais que faire si vous avez 12? Les fichiers en clair n'ont pas besoin d'être des multiples de la taille de bloc en CTR. Vous pouvez NULL pad aux 8 octets les plus proches cela ne fonctionnera pas après cela – neubert

Questions connexes