2011-08-16 5 views
0

que je cherchais des exemples comment coder des choses en C en utilisant DES cypher et en-têtes OpenSSL et je trouve celui-ci: http://www.codealias.info/technotes/des_encryption_using_openssl_a_simple_exampleC: DES problème de cryptage

Le code est presque parfait, mais je ne suis pas expert dans ce choses et ma connaissance de C en C est pas si grand que je l'utilise sur les micro-contrôleurs PIC et AVR ...

Quoi qu'il en soit dans le code:

printf("Clear text\t : %s \n",clear); 
memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear)); 
printf("Encrypted text\t : %s \n",encrypted); 
memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear)); 
printf("Decrypted text\t : %s \n",decrypted); 

Comme vous pouvez le voir, sizeof (clair) est utilisé comme la taille de la chaîne ... le problème est que sur l'exemple, nous connaissons le s ize de la chaîne de caractères ... mais quand j'envoie ce texte sur le réseau l'autre ordinateur ne le sait pas ...

Comment résoudre ce problème ... Je ne comprends pas très bien pourquoi J'ai besoin d'avoir la taille de la chaîne d'origine pour décrypter: S

Merci !!

+4

Je voudrais simplement mentionner que ppl ne devrait pas vraiment être en utilisant DES ... il est cassé. 3DES (triple DES) est un bien meilleur choix. –

+1

@Jeremy 3DES est en fait le même bon vieux DES appliqué 3 fois. Le DES n'est pas cassé, juste 64 bits (ou en réalité 56 bits) sont trop courts ces jours-ci, mais les clés 3DES double-longueur sont toujours correctes. On ne peut pas implémenter 3DES sans implémenter DES. – qrdl

+0

@qrdl 3DES est appliqué à DES, puis appliqué à l'envers, puis réappliqué, et est considérablement plus fort que DES. DES n'est pas approuvé dans toute industrie réglementée nécessitant la transmission de données sécurisées, alors que 3DES est approuvé dans la plupart des cas. Ce n'est pas le plus fort, mais il devrait être considéré comme la norme minimale de cryptage des données pour tout nouveau travail. –

Répondre

3

The world is full of bad security systems designed by people who read Applied Cryptography.

Ne pas envoyer vos propres trucs 'encryptyed' sur le fil. Il vous manque un HMAC, il vous manque un protocole d'échange de clés, il vous manque un protocole de trame (ce qui est exactement la réponse à votre question "comment puis-je connaître la taille"). Utilisez simplement un protocole standard tel que TLS/SSL. gnu-tls offre une API facile à utiliser pour SSL/TLS, openssl le supporte également mais est notoirement lourd à utiliser. Quoi que vous fassiez, ne commencez pas à écrire votre propre protocole, vous arriverez avec un autre protocole de "cryptage" cassé à cause d'un mauvais échange de clé ou d'un "nonce optimisé" ou d'une signature de trame manquante ou autre.

Voici un exemple simple en utilisant gnu-tls: Simple client example using the C++ API

+0

J'écris le programme en C alors l'utilisation de C++ devient une douleur maintenant ... de toute façon, je n'ai pas besoin d'une sécurité exagérée les données ne sont pas si importantes ici ...mais une sécurité de base (en C) pour crypter certaines données et les renvoyer serait utile ... – TCB13

+2

Il y a aussi beaucoup d'exemples C disponibles, comme http://www.gnu.org/software/gnutls/manual/html_node/ Simple-client-exemple-avec-anonyme-authentication.html # Simple-client-exemple-avec-anonyme-authentification. 'sécurité de base pour crypter certaines données renvoyer' = vous avez besoin de SSL/TLS. Il n'y a rien de plus simple que cela. –

+0

merci ... Remus Rusanu, je vais tuer ma tête maintenant avec ça. – TCB13

2

Dans les implémentations que j'ai vues de DES, je me rappelle seulement avoir vu du texte en clair et du texte chiffré de la même taille. Wikipedia seems to confirm this. Étant donné que DES fonctionne sur des blocs de 64 bits, cela serait possible tant que le code implémentant DES remplit correctement l'entrée pour correspondre à ces limites de 64 bits. En fait, c'est à peu près la définition d'un block cipher (ce qui est ce que DES est).

Ainsi, je parierais que vous le verrez fonctionner parfaitement avec l'autre ordinateur en utilisant la taille du texte chiffré. Quelques tests de votre part devraient être en mesure de confirmer cela absolument.

Aussi, je suis entièrement d'accord avec le commentaire de Jeremy que DES est un mauvais choix d'algorithme de chiffrement pour la plupart des situations. Triple DES ou AES sont des options bien meilleures.