grandyaka54
Messages postés97Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention18 décembre 2013
-
6 févr. 2012 à 17:54
grandyaka54
Messages postés97Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention18 décembre 2013
-
9 févr. 2012 à 08:42
Bonjour à tous,
J'ai un problème sur lequel je ne m'explique pas. Ma fonction Crypt(Maintenant, '.cry'); que j'utilise dans la fonction btnCryptageClick() me retourne une valeur différente.
Je m'explique, la variable Resultat n'a pas la même valeur que le Result de ma fonction. Sauf quand Result =: 0;
En ce moment je test le cas où le fichier crypté n'est pas créé (suite à un dossier où on n'a pas le droit d'écriture par exemple).
Result me retourne bien la valeur 11 or quand on lit le contenu de la variable Resultat, j'ai la valeur 1305132 !!!!
Que peut-il bien se passer ?
//>>*********** Clic sur le bouton de cryptage *****************************
procedure TfrmVisufichierSecu.btnCryptageClick(Sender: TObject);
var
Maintenant : String;
Resultat : Byte;
begin
Screen.Cursor := crHourGlass;
Maintenant := (FormatDateTime('yymmdd_hhnnss_',Now));
Resultat := Crypt(Maintenant, '.cry');
if (Resultat = 0) then //Pas d'erreur
begin
with dmData.ibqrGet do
begin
SQL.Clear;
SQL.Add('INSERT INTO FichierSecu(Chemin, NomCourt, ...)');
SQL.Add('VALUES (:Chemin, :NomCourt, ...)');
...
Params.ParamByName('Chemin').AsString := ficChemin; //Chemin du fichier crypté.
Params.ParamByName('NomCourt').AsString := Maintenant + NomCourt + '.cry'; //Nom du fichier crypté.
....
Params.ParamByName('NomCpt').AsString := NomCompte; //Nom du compte de la remise
....
ExecSQL;
end;//with
if dmData.TransacEspBq.Active
then dmData.TransacEspBq.Commit;
end
//Des erreurs
else begin
if (Resultat = 1) then
begin
MessageBox(Self.Handle,PChar('Les infos n''ont pas pu être cryptées correctement.'+#13
+'Le répertoire est peut être en lecture seule.'+#13+#13
+'Contacter le service d''assistance !'),
PChar('Anomalie !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);
end
else begin
if (Resultat = 11) then
begin
MessageBox(Self.Handle,PChar('Le fichier contenant les infos cryptées n''a pas pu été créé.'+#13+#13
+'Le répertoire est peut être en lecture seule.'+#13+#13
+'Contacter le service d''assistance !'),
PChar('Anomalie !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);
end
else begin
//Resultat = 100
MessageBox(Self.Handle,PChar('Le fichier d''origine n''a pu être supprimé !!!'+#13+#13
+'Il continura d''apparaitre dans la liste précédente.'+#13+#13
+'Contacter le service d''assistance !'),
PChar('Suppression fichier : Echec !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);
end;//if (Resultat = 11)
end;//if (Resultat = 1)
end;//if (Resultat = 0)
Screen.Cursor := crDefault;
end;
//>>********** Cryptage du fichier *****************************
function TfrmVisufichierSecu.Crypt(Maintenant: String; Ext: String): Byte; //Integer; //Byte;
var
Buffer : Array[0..1023] of byte;
BytesRead : Integer;
INStrm : TFilestream;
OUTStrm : TFilestream;
Begin
Result := 0;
try
INStrm := Tfilestream.Create(ficChemin + NomCourt,fmOpenRead OR fmShareExclusive);
except
DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
Result := 1;
exit;
end;
Try
try
Outstrm := Tfilestream.Create(ficChemin + Maintenant + NomCourt + Ext,fmCreate OR fmShareExclusive);
AES.InitStr(VirSEcuCLEF_AES,TDCP_sha256);
inStrm.Position := 0;
while (inStrm.Position <> instrm.size) do
begin
BytesRead := inStrm.Read(Buffer, 1024);
AES.EncryptCBC(Buffer, Buffer, BytesRead);
Outstrm.write(Buffer, BytesRead);
end;
except
DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
Result := 1;
end;
//Avant de supprimer le fichier de départ,
//On contrôle si le fichier crypter est bien présent ou pas
if (instrm.Size <> -1) then instrm.Free;
if (outstrm.Size <> -1) then outstrm.Free ;
if not FileExists(ficChemin + Maintenant + NomCourt + Ext) then
begin
Result := 11; //Signifie que le fichier crypté n'existe pas
end;
//////
//SUPPRESSION du fichier de départ.
Try
If (Result = 0) then //Pas d'erreur d'écriture du nouveau fichier.
begin
If FileExists(ficChemin + NomCourt)
Then Begin
if (instrm.Size <> -1) then instrm.Free;
if (outstrm.Size <> -1) then outstrm.Free ;
If (DeleteFile(ficChemin + NomCourt) <> True) //Test est à TRUE si le delete du fichier a bien été fait.
Then Begin
DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
Exit;
end;
//Si la suppression n'a pas bien été effectuée, on met Result à 100.
If FileExists(ficChemin + NomCourt)
Then Result := 100; //Signifie que ça ne s'est pas bien passé.
end;
end; //If result
Except;
End;
Finally
if (instrm.Size <> -1) then instrm.Free;
if (outstrm.Size <> -1) then outstrm.Free;
End;
end;
grandyaka54
Messages postés97Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention18 décembre 20135 9 févr. 2012 à 08:42
Bonjour Cantador,
Effectivement, si je mets un point d'arrêt sur la fonction
if (Resultat = 0) then
Je trouve 144 si la fonction retourne un Byte ou 1305132 si la fonction retourne un integer comme valeur.
dans
Resultat := Crypt(Maintenant, '.cry');
Or dans la fonction Crypt(Maintenant, '.cry');, si j'enlève ce code
//Avant de supprimer le fichier de départ,
//On contrôle si le fichier crypter est bien présent ou pas
if (instrm.Size <> -1) then instrm.Free;
if (outstrm.Size <> -1) then outstrm.Free ;
pour contrôler la présence du fichier
if not FileExists(ficChemin + Maintenant + NomCourt + Ext) then
begin
Result := 11; //Signifie que le fichier crypté n'existe pas
end;
La fonction me retourne bien la valeur 11 attendue. (Je supprime manuellement le fichier pour tester la fonction FileExists).