SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 31 déc. 2007 à 21:52
Le 4 c'est que tu allouais 32000 octets de mémoire mais tu mettais tout le fichier dedans sans tester quoi que ce soit.
Résultat, si tu avais eu un fichier plus gros que 32000, ton programme se serait terminé par un débordement tampon.
TrD_
Messages postés7Date d'inscriptiondimanche 14 janvier 2007StatutMembreDernière intervention29 mars 2008 31 déc. 2007 à 20:18
SAKingdom j'ai saisie ton message bien que ton petit 4 était douteux, bref je ne comprend pas pourquoi cela marchait avant mais bon cela a améliorez ma source et je tant remercie.
Si jamais tu rencontre d' autre erreur fais moi en part.
Si quelqu'un peut me dire comment craqué un fichier crypter par cette fonctions j'aimerai bien créer un contre programme pour cette techniques j'ai déjà quelque projets mais tous n'aboutissent pas pourtant mon programme est loin de sécuriser un fichier aussi bien que XOR ou PGP ...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 31 déc. 2007 à 17:20
for(i = 0 ; i < strlen(pbuf) ; i++)
1. Ne jamais mettre strlen dans une boucle quand la taille ne change jamais. Calcule la taille de la chaine avant.
2. Même en calculant avant, je vois mal comment strlen pourra te donner la taille puisque strlen cherche le 0 de fin de chaine et ta chaine n'en contient tout simplement pas.
3. Aucun besoin de strlen. fread te retourne le nombre d'éléments qu'elle à lu.
4. Tu fais quoi si ton fichier fait plus que 32000 octets ?
TrD_
Messages postés7Date d'inscriptiondimanche 14 janvier 2007StatutMembreDernière intervention29 mars 2008 31 déc. 2007 à 14:35
Merci des conseils et de l' informations (taille), j' en ai tenu compte et j' ai améliorez ma source. Dites moi si d' autre problèmes persiste et si le cryptage utilisé est sécurisé et sinon comment le "craqué" par un programme.
Merci.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 déc. 2007 à 11:52
Si tu utilises API Windows alors sera tout API, exit fread() et toute autre fonction libc standard.
A mettre tout le fichier dans un buffer, il y a risque de taille.
#define BUFSIZE 4096
pbuf = (char*) malloc(BUFSIZE);
et tu boucles sur taille buffer tant qu'il reste des octets non lus du fichier source. C'est assurance d'aller au bout sans risque d'erreur mémoire.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 31 déc. 2007 à 11:52
regarde ce que la fonction fread renvoie
sinon pour avoir la taille du fichier il y a fseek ftell
fseek(f,0,SEEK_END);
int taille = ftell(f);
fseek(f,0,SEEK_SET);
TrD_
Messages postés7Date d'inscriptiondimanche 14 janvier 2007StatutMembreDernière intervention29 mars 2008 31 déc. 2007 à 11:40
Désolé, lol, j' ai vraiment honte j' ai bien saisie l' utilisation de l' allocution dynamique mais ceci
"fread(pbuf, sizeof(char), QuantiteIci, f1);" me pose quelque souci la fonction lit tant d' octet comme prévu mais s' arrête j' ai réfléchi et j' ai abouti sur la solution que il me faut la taille du fichier en Octets pour pouvoir l' assigner a la variable, ici, "QuantiteIci".
Donc, j' ai cherché comment connaître la taille du fichier mais je n' ai toujours pas compris comment faire.
D' un coté je n' ai pas trouvé car je ne veut pas d' une fonctions toute faite d' une fonctions API WIN32 .
Si quelqu' un peut m' axer dans mes recherches merci.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 déc. 2007 à 23:08
char *pbuf;
pbuf = (char*) malloc(32KoParExemple);
if(!pbuf) return;
fread sait lire autant que tu veux et non 1 seul octet.
fread(pbuf, sizeof(char), QuantiteIci, f1);
...
free(pbuf); // QUAND PLUS BESOIN
TrD_
Messages postés7Date d'inscriptiondimanche 14 janvier 2007StatutMembreDernière intervention29 mars 2008 30 déc. 2007 à 22:43
Pouvez vous préciser les erreurs et les corrections que je dois apporter.
La lecture par octet étant mauvaise quelle mauvaise quelle fonctions aurais je du utiliser (fscanf(), fgets(), ...).
Merci, pour la remarque elle permet de m' améliore, pour ce qui est du commentaires de ACX01B est t' il vraiment nécessaire de crypter la clé sachant que celle ci doit être préservé uniquement par l' utilisateur?
J' attend de nouvelles informations pour modifier et améliorer au mieu ma source merci.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 déc. 2007 à 20:13
Ceci relève de l'exercice perso qui n'apporte rien à ceux qui le liront si ce n'est de mauvaises habitudes.
Un fichier ne se lit pas octet par octet, ça se traite par bloc dans un buffer.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 30 déc. 2007 à 11:32
le fichier contenant la clé il faut le crypter aussi :)
31 déc. 2007 à 21:52
Résultat, si tu avais eu un fichier plus gros que 32000, ton programme se serait terminé par un débordement tampon.
31 déc. 2007 à 20:18
Si jamais tu rencontre d' autre erreur fais moi en part.
Si quelqu'un peut me dire comment craqué un fichier crypter par cette fonctions j'aimerai bien créer un contre programme pour cette techniques j'ai déjà quelque projets mais tous n'aboutissent pas pourtant mon programme est loin de sécuriser un fichier aussi bien que XOR ou PGP ...
31 déc. 2007 à 17:20
1. Ne jamais mettre strlen dans une boucle quand la taille ne change jamais. Calcule la taille de la chaine avant.
2. Même en calculant avant, je vois mal comment strlen pourra te donner la taille puisque strlen cherche le 0 de fin de chaine et ta chaine n'en contient tout simplement pas.
3. Aucun besoin de strlen. fread te retourne le nombre d'éléments qu'elle à lu.
4. Tu fais quoi si ton fichier fait plus que 32000 octets ?
char *pbuf = (char*)malloc(32000);
int j, i;
while((j = fread(pbuf, sizeof(char), 32000, f1)))
for(i = 0 ; i < j ; i++)
{
printf("%ld ", n);
pbuf[i] -= n;
}
31 déc. 2007 à 14:35
Merci.
31 déc. 2007 à 11:52
CreateFile()
GetFileSize[Ex]()
ReadFile()
WriteFile()
CloseHandle()
A mettre tout le fichier dans un buffer, il y a risque de taille.
#define BUFSIZE 4096
pbuf = (char*) malloc(BUFSIZE);
et tu boucles sur taille buffer tant qu'il reste des octets non lus du fichier source. C'est assurance d'aller au bout sans risque d'erreur mémoire.
31 déc. 2007 à 11:52
sinon pour avoir la taille du fichier il y a fseek ftell
fseek(f,0,SEEK_END);
int taille = ftell(f);
fseek(f,0,SEEK_SET);
31 déc. 2007 à 11:40
"fread(pbuf, sizeof(char), QuantiteIci, f1);" me pose quelque souci la fonction lit tant d' octet comme prévu mais s' arrête j' ai réfléchi et j' ai abouti sur la solution que il me faut la taille du fichier en Octets pour pouvoir l' assigner a la variable, ici, "QuantiteIci".
Donc, j' ai cherché comment connaître la taille du fichier mais je n' ai toujours pas compris comment faire.
D' un coté je n' ai pas trouvé car je ne veut pas d' une fonctions toute faite d' une fonctions API WIN32 .
Si quelqu' un peut m' axer dans mes recherches merci.
30 déc. 2007 à 23:08
pbuf = (char*) malloc(32KoParExemple);
if(!pbuf) return;
fread sait lire autant que tu veux et non 1 seul octet.
fread(pbuf, sizeof(char), QuantiteIci, f1);
...
free(pbuf); // QUAND PLUS BESOIN
30 déc. 2007 à 22:43
La lecture par octet étant mauvaise quelle mauvaise quelle fonctions aurais je du utiliser (fscanf(), fgets(), ...).
Merci, pour la remarque elle permet de m' améliore, pour ce qui est du commentaires de ACX01B est t' il vraiment nécessaire de crypter la clé sachant que celle ci doit être préservé uniquement par l' utilisateur?
J' attend de nouvelles informations pour modifier et améliorer au mieu ma source merci.
30 déc. 2007 à 20:13
Un fichier ne se lit pas octet par octet, ça se traite par bloc dans un buffer.
30 déc. 2007 à 11:32