J'ai un texte en clair et j'ai le texte chiffré avec moi et ma tâche est de trouver la clé pour le texte chiffré déclaré. La clé est une liste de mots comme un dictionnaire. J'ai écrit le code en c et il compile parfait et crée le fichier avec tous les chiffrements. Le problème auquel je suis confronté est que chaque fois que je lance le code, un texte chiffré est complètement différent. Je n'ai aucune idée d'où je fais une erreur. Ce qui suit est le code que j'avais écritopenssl cryptage et décryptage en utilisant la bibliothèque evp
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/evp.h>
int main()
{
int i;
char words[32], t;
FILE *key, *outFile;
const char *out = "Output.txt";
unsigned char outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
unsigned char iv[] = "0000000000000000";
int outlen, tmplen;
int num;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
char inText[] = "This is a top secret.";
char cipherText[] = "8d20e5056a8d24d0462ce74e4904c1b513e10d1df4a2ef2ad4540fae1ca0aaf9";
key = fopen("words.txt", "r");
if(remove("ciphertext.txt") == -1) {
perror("Error deleting file");
}
outFile = fopen("ciphertext.txt", "a+");
if(key < 0 || outFile < 0)
{
perror ("Cannot open file");
exit(1);
}
char pbuffer[1024];
while (fgets(words,32, key))
{
i=strlen(words);
words[i-1]='\0';
//printf("%s",words);
i = 0;
EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, words, iv);
if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, inText, strlen(inText)))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
if(!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
outlen += tmplen;
print_hex(outbuf, outlen, outFile);
}
fclose(key);
fclose(outFile);
return 1;
}
int print_hex(unsigned char *buf, int len, FILE *outFile)
{
int i,n;
char x='\n';
for (i = 0; i < len; i++)
{
fprintf(outFile,"%02x",buf[i]);
}
fprintf(outFile,"%c",x);
return (0);
}
Depuis la clé est un mot. Les mots dans la liste de mots peuvent être de taille < ou> 16 octets et de mes recherches sur openssl il a été dit qu'il y aura un padk # 5 si la longueur du bloc ne rentre pas dans 16 octets. Est-ce le même cas pour la clé aussi.
Le texte chiffré que j'ai déclaré ne correspond pas au texte chiffré que je génère à partir du programme et je n'arrive pas à trouver la clé pour le texte chiffré.
J'ai besoin de l'aide des experts. Je vous serais reconnaissant si quelqu'un me aide à sortir de la peine
Merci à l'avance
Sans en savoir plus sur l'arrière-plan de votre problème, c'est difficile à dire. Si les mots ont moins de 16 caractères alors le remplissage (disons avec NULs) serait raisonnable, mais que faire si le mot est trop long? Juste le tronquer? Je doute que toute application de chiffrement du monde réel ferait quelque chose de si simple ... – dajames