2012-07-18 1 views
3

J'utilise Libgcrypt avec Elgamal pour chiffrer un bloc d'octets, et je suis d'avoir 2 problèmes:perte de données lors du cryptage et de décryptage en utilisant libgcrypt et Elgamal

  1. Quand je ne l'utilise pas padding et mon bloc de octets commence lequel un octet zéro, je perds le premier octet pendant le déchiffrement;

  2. Si j'utilise un remplissage, le cryptage fonctionne bien, mais lorsque je décrypte le remplissage n'est pas supprimé. Et apparemment le premier octet zéro toujours là.

Avec RSA, je suis le même problème :(

Mon code de test est là. www.tiago.eti.br/storage/post.c Et ne pas utiliser le rembourrage

Pour utiliser padding vous devez changer:

#define PADDING "raw" 

à

#define PADDING "pkcs1" 

Et pour changer le changement de l'algorithme de chiffrement:

#define ALG "elg" 

à

#define ALG "rsa" 

Pour vous compilez devez utiliser:

gcc -Wall -g post.c -lgcrypt -o post 

Que puis-je faire pour le résoudre?

+1

Je ne suis pas sûr que je m'attendrais à ce que le rembourrage soit supprimé lorsque le bloc est déchiffré. – argentage

+2

Dans la documentation, vous trouverez ceci: « Fonction:. Gcry_error_t gcry_pk_decrypt (gcry_sexp_t * r_plain, données gcry_sexp_t, gcry_sexp_t spour) (...) Cette fonction ne supprime pas le rembourrage à partir des données par défaut Pour laisser Libgcrypt enlever le rembourrage, donner un indice dans 'flags 'indiquant quelle méthode de remplissage a été utilisée lors du chiffrement: (flags padding-method)" Et je l'ai fait. Mais cela n'a pas fonctionné.... –

Répondre

2

J'ai posté la même question dans la liste de diffusion de Libgcrypt et j'ai eu une réponse. Libgcrypt jusqu'à 1.5.0 ne supprime pas le remplissage: il reconnaît les drapeaux mais ne fait rien avec le rembourrage.

Donc, la solution est mise à jour Libgcrypt à 1.5.0.