malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 2009
-
17 août 2004 à 12:57
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 2007
-
17 août 2004 à 16:09
Hello,
en un mot : H-E-L-P-!-!-!
J'ai un problème qui m'énerve depuis deux jours...
printf("\n\n");
for (x=0; x<20;x++){
table[x]=(int)out[x];
printf("%d ",table[x]);
}
printf("\n");
return 0;
}
j'aurai en réponse
42 174 108 53 201 79 207 180 21 219 233 95 64 139 156 233 30 232 70 237, ce qui est ce que je lui demande (hashage d'e "hello world" en utilisant SHA-1). Maintenant, ça se complique. Je veux faire ça dans une interface graphique. J'ai fait une fenêtre avec un bouton browse qui va chercher le fichier à hasher. Ensuite, en appuyant sur OK, le hashage est sauvé dans un fichier temporaire... mais voilà, c'est pas les chiffres que j'ai dans ce fichier, mais des "char" bizarroïdes et je sais vraiment pas comment faire un "cast" dans ce cas, HELP!
Un peu de code pour être plus clair:
... blabla ...
//Création du fichier cible
hDestFile = CreateFile("C:/WINDOWS/Temp/this-is-a-temporary-file.txt",GENERIC_WRITE,NULL,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
Si je regarde le fichier de sortie, j'ai: Ê..À¾’Þí¢0.. et j'aimerai qqch du type : 42 174 108 53 201 79 207 180 21 219 233 95 64 139 156 233 30 232 70 237
Quelqu'un peut m'aider? Je désespère à trouver comment faire ce "cast"... HELP!!!!
Malik7934
PS: peut-être que je devrais poser la question autrement:
sachant que dans ma console je peux faire
for (x=0; x<20;x++){
table[x]=(int)out[x];
printf("%d ",table[x]);
}
et grace au %d, j'ai de beaux chiffres qui correspondent à ce que je veux, comment on fait ça dans une API sachant que j'écris ma réponse ainsi:
for (i=0;i<20;i++){
char buf[3];
sprintf(buf,"%02x ",out[i]);
bRet = WriteFile(hDestFile,buf,3,&dwO,0);
}
Maintenant, mon problème c'est d'afficher des décimals "propres", plutôt que des hexa...
Le code
for (i=0;i<20;i++){
char buf[4]={0};
sprintf(buf,"%d ",out[i]);
bRet = WriteFile(hDestFile,buf,3,&dwO,0);
}
ne donne pas qqch de propre...
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 17 août 2004 à 15:30
Etant donné qu'une signature sha-1 est composée d'entiers de 8 bits maximum et qu'on ne prend que leur valeur positive, à prioris tu n'as qu'à remplacer
sprintf(buf,"%02x ",out[i]);
par
sprintf(buf,"%03hu ",out[i]);
Comme out est en unsigned char y'a rien besoin de changer d'autre.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 17 août 2004 à 13:09
fo ke tu utilises itoa() pour passer dentiers vers chaine de carac, mais je vois pas comment tu remplis ton "out", tu peux poster le code corresponddant ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 août 2004 à 13:13
Si tu as ecrit les donnees direct dans leur format binaire (et c'est tres bien) alors tu les relis idem.
par exemple:
int table[20];
DWORD v;
HANDLE hfl;
v = 0; ReadFile(hfl, table, sizeof(int) * 20, &v, 0);
CloseHandle(hfl);
tu as le nbr OCTETS lus dans v, a diviser par sizeof(int) pour savoir combien de 'int' inseres dans table.
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 17 août 2004 à 13:15
Non, t'y es pas. J'ai un "unsigned char out[20]" qui contient du blabla tel que si je fais un printf("%d ",(int)out[x]) (x entre 0 et 20), j'obtiens un entier. Je veux récupérer et sauver ces entiers dans un fichier. Voici mon code pour l'instant:
/*****************************************************************************************
Programme pour encrypter des fichiers et les décrypter
*****************************************************************************************/
#define _WIN32_WINNT 0x0501
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "resource.h"
#include "C:/Documents and Settings/mhammout/Desktop/ProgC-Malik/mycrypt.h"
#pragma comment(lib, "C:/Documents and Settings/mhammout/Desktop/ProgC-Malik/tomcrypt.lib")
//Point d'entrée du prog
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR szCmdLine,int nCmdShow)
{
return (int)DialogBox(hInst,MAKEINTRESOURCE(IDD_MAIN),NULL,MainDlgProc);
}
//Procédure pour le dialogue principal -- Traitement des messages
BOOL CALLBACK MainDlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
SendMessage(GetDlgItem(hWnd,IDC_R_CRYPT),BM_SETCHECK,1,0);
SendMessage(GetDlgItem(hWnd,IDC_CK_DEL_SRC),BM_SETCHECK,1,0);
return TRUE;
case WM_COMMAND:
switch((UINT)wParam)
{
case IDCANCEL:
return EndDialog(hWnd,0);
//Bouton ok, encrypter ou décrypter un fichier
case IDC_B_OK:
if(OnBOk(hWnd))
MessageBox(hWnd,"Traitement terminé.","Succès",MB_OK);
else
MessageBox(hWnd,"Une erreur est survenue.","Erreur",MB_OK);
return TRUE;
//Bouton Browse pour le fichier source
case IDC_B_BROWSE_SRC:
OnBrowse(hWnd,true);
return TRUE;
//Bouton Browse pour le fichier destination
case IDC_B_BROWSE_DEST:
OnBrowse(hWnd,false);
return TRUE;
}
break; /*WM_COMMAND*/
}
return FALSE;
}
//Quand on clique sur un des deux buton browse, pour faire afficher le
//dialogue enregistrer sous ou ouvrir
void OnBrowse(HWND hParent,bool bOpen)
{
OPENFILENAME sOpenFile;
char szPath[MAX_PATH + 1];
BOOL bRet;
HWND hCtrl;
//Création du fichier cible, il le met dans Temp de WINDOWS
hDestFile = CreateFile("C:/WINDOWS/Temp/this-is-a-temporary-file.crypt",GENERIC_WRITE,NULL,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
// delete[] szDest;
if(hSrcFile == INVALID_HANDLE_VALUE)
{
delete[] szSrc;
CloseHandle(hSrcFile);
return FALSE;
}
//Création du buffer pour lire le fichier source
dwFileSize = GetFileSize(hSrcFile,NULL) + 1;
szData = new char[dwFileSize];
//Vérifier si les données ont bien été enregistrées dans le fichier cible
//Et si oui on vérifie s'il faut supprimer le fichier source
// if(bRet && SendMessage(GetDlgItem(hWnd,IDC_CK_DEL_SRC),BM_GETCHECK,0,0) == BST_CHECKED)
// DeleteFile(szSrc);
// C'EST JUSTE ICI QU'ON EFFACERA LE FICHIER TEMP APRES USAGE
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 17 août 2004 à 13:23
Salut Brunews,
Personnellement j'ai du mal a comprendre le pb de ce monsieur, jaurais pensé au depart que ce kil recuperait etait la correspondance ascii de ces nombres, ce ke Brunews a montré.
C bien BruNews, continue comme cela.
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 17 août 2004 à 13:24
Pendant un instant j'y ai cru! Mais j'ai toujours le même problème en faisant (~) ce que tu dis... si t'as du temps à perdre, jette un oeil à mon code!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 août 2004 à 13:28
ah non c'est pas la methode de lire un code, induit seulement en erreurs. Ce qu'il faut c'est un cahier des charges.
Si tu ecris un tab de int par WriteFile, tu le relis idem par ReadFile.
Vraiment le prob m'echappe.
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 17 août 2004 à 16:09
Tu trouves ça dans les fichiers d'aide de tous les compilos je pense, si vraiment tu ne trouve pas je te filerai la doc une fois que j'aurai tout réinstallé.