Criptografar Arquivo INI
Olá pessoal, tudo bem?
Estou com um problema para fazer a criptografia de arquivos INI.
Tenho um arquivo INI no meu projeto com algumas informações importantes e gostaria que não fosse visível para os usuários fora do sistema.
Criei um objeto descendente do TINIFile com dois procedimentos writeCryptString e ReadCryptString. O problema acontece que dependendo do texto que eu criptografo, o programa se perde para recuperá-lo do INI.
Acredito que seja porque o texto criptografado possua algum caractere que seja reservado ao arquivo INI, como por exemplo o ´=´ que delimita o campo e o valor do campo. Não consigo sair desse impasse.
Alguém tem alguma dica de como posso fazer isso? Alguém já passou por este problema?
Obrigado.
Estou com um problema para fazer a criptografia de arquivos INI.
Tenho um arquivo INI no meu projeto com algumas informações importantes e gostaria que não fosse visível para os usuários fora do sistema.
Criei um objeto descendente do TINIFile com dois procedimentos writeCryptString e ReadCryptString. O problema acontece que dependendo do texto que eu criptografo, o programa se perde para recuperá-lo do INI.
Acredito que seja porque o texto criptografado possua algum caractere que seja reservado ao arquivo INI, como por exemplo o ´=´ que delimita o campo e o valor do campo. Não consigo sair desse impasse.
Alguém tem alguma dica de como posso fazer isso? Alguém já passou por este problema?
Obrigado.
Prgdelphi
Curtidas 0
Respostas
Delphi32
14/06/2005
Bem, você já testou a rotina por fora? Quer dizer, inicie um projeto, coloque um edit e mande criptografar com a rotina que você está usando. Depois mande descriptografar e veja se funciona. Uma vez tive esse prolema com um algoritmo de criptografia ruim. O Algoritmo não conseguia descriptografar se eu misturasse letras maiúsculas com minúsculas. Que componente (rotina) você está usando para criptografar/descriptografar?
Até!
Até!
GOSTEI 0
Prgdelphi
14/06/2005
Já testei por fora sim e a rotina funcionou certinho... seguem os algoritmos... acho que o problema é com o INI mesmo que ´se perde´ quando o algoritmo criptografa os dados.
functionMemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer;
TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i: Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end
else
Result := False;
end;
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer;
TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i: Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end
else
Result := False;
end;
function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
var
bOK: Boolean;
begin
SetLength(Result, Length(s));
if Encrypt then
bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
else
bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
if not bOK then
Result := ´´;
end;
function TextEncrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, True);
end;
function TextDecrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, False);
end;
functionMemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer;
TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i: Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end
else
Result := False;
end;
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer;
TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i: Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end
else
Result := False;
end;
function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
var
bOK: Boolean;
begin
SetLength(Result, Length(s));
if Encrypt then
bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
else
bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
if not bOK then
Result := ´´;
end;
function TextEncrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, True);
end;
function TextDecrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, False);
end;
GOSTEI 0
Massuda
14/06/2005
Já testei por fora sim e a rotina funcionou certinho... seguem os algoritmos... acho que o problema é com o INI mesmo que ´se perde´ quando o algoritmo criptografa os dados.
Seu algoritmo de criptografia está sujeito a gerar um texto que contem caracteres ´não imprimíveis´ (por exemplo, CR, LF, etc).Um jeito simples de contornar esse problema seria modificar TextEncrypt/TextDecrypt (não testei)...
function TextEncrypt(const s: string; Key: TWordTriple): string; var T: string; I: Integer; begin T := TextCrypt(s, Key, True); Result := ´´; for I := 1 to Length(T) do begin Result := Result + IntToHex(Ord(T[I]), 2); end; end; function TextDecrypt(const s: string; Key: TWordTriple): string; var T: string; I: Integer; begin T := ´´; for I := 1 to Length(S) div 2 do begin T := T + Chr(StrToInt(´$´ + Copy(S, 2*I-1, 2))); end; Result := TextCrypt(T, Key, False); end;
GOSTEI 0
Prgdelphi
14/06/2005
Obrigado amigo, agora funcionou certinho.
GOSTEI 0
Helio Nascimento
14/06/2005
function TextEncrypt(const s: string; Key: TWordTriple): string; var T: string; I: Integer; begin T := TextCrypt(s, Key, True); Result := ´´; for I := 1 to Length(T) do begin Result := Result + IntToHex(Ord(T[I]), 2); end; end;
[color=blue:72ea92fdaf]Matsuda[/color:72ea92fdaf]
Voce poderia me informar a unit, pois o D7 não recolhece o TWordTriple.
Obrigado.
GOSTEI 0
Massuda
14/06/2005
[quote:6f1b7c90a6=´Helio Nascimento´]...o D7 não recolhece o TWordTriple.[/quote:6f1b7c90a6]Lamento não poder ajudar... Isso já estava no post do colega prgdelphi e é algo que está no código feito por ele, não no Delphi.
GOSTEI 0
Prgdelphi
14/06/2005
o TWordTriple é um array com de Word com 3 posições.
[b:94c3d3241d]type[/b:94c3d3241d] TWordTriple = [b:94c3d3241d]array[/b:94c3d3241d][0..2] [b:94c3d3241d]of[/b:94c3d3241d] Word;
Se quiser posso passar a unit completa que faz essa criptografia. Agora está funcionando perfeitamente.
[b:94c3d3241d]type[/b:94c3d3241d] TWordTriple = [b:94c3d3241d]array[/b:94c3d3241d][0..2] [b:94c3d3241d]of[/b:94c3d3241d] Word;
Se quiser posso passar a unit completa que faz essa criptografia. Agora está funcionando perfeitamente.
GOSTEI 0
Walter Junior
14/06/2005
E ae pessoal tudo bem ...
Criptografia de arquivo ini.
Poxa cara estou a procura de programa assim como você fez ... esta beleza, parabéns !
Poderia mandar para mim o font inteiro é que estou tendo problemas para como usar as funções como imlementar usando essas funções... podria me mandar ? pode ser um exemplo uma unit qualquer.
Eis meu email: warhjr@gmail.com ou walterrhjr@gmail.com.
Estarei aguardando o font, desde já muito obrigado!
Wjr
Usuário DevMedia.
GOSTEI 0