Protegendo seu Sistema utilizando Criptgrafias no arquivo de Configuração
Olá leitores e colegas do Devmedi,estou eu aqui novamente para dar a minha colaboração, como prometido no artigo anterior mostramos como Acessar o Banco de Dados através de arquivos .ini: http://www.devmedia.com.br/articles/viewcomp.asp?comp=7738 Quero aqui mostrar o como proteger nossos arquivos de configuração atraves de criptografia de dados.
SysUtils, Classes, DBXpress, DB, SqlExpr,
TDm = class(TDataModule)
Conexao: TSQLConnection;
procedure ConexaoBeforeConnect(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
UserBD, { Usuário do Banco de Dados }
PassDB, { Senha do Banco de Dados }
PathBD, { Path do Banco de Dados }
Fundo2, {Imagem do Fundo}
Path, {Path do Banco de Dados}
PathImage, {Path das Imagens}
PathSkin, {Path dos Skins}
Usuario: String; {Armazena o Usuario}
function Encrypt(const S: String; Key: Word): String;
function Decrypt(const S: ShortString; Key: Word): String;
end;
Dm: TDm;
C2 = 22719;
{Procedimento do Evento BeforeConnect do Objeto sqlConnection onde irá ler todas as informações do arquivo Ini criptografado}
var
ConfigIni : TIniFile;
Path : String;
begin
//Seta as propriedades da conexão em tempo de execução pegando os dados do arquivo config.ini
ConfigIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Config.ini');
Conexao.Params.Values['Database']:= ConfigIni.ReadString('CONFIG', 'DATABASE', '');
ConfigIni.Free;
end;
var
I: byte;
begin
Result := '';
for I := 1 to Length(S) do
begin
Result := Result + IntToHex(byte(char(byte(S[I]) xor (Key shr 8))), 2);
Key := (byte(char(byte(S[I]) xor (Key shr 8))) + Key) * C1 + C2;
end;
var
I: byte;
x: char;
begin
result := '';
i := 1;
while (i < Length(S)) do
begin
x := char(strToInt('$' + Copy(s, i, 2)));
Result := result + char(byte(x) xor (Key shr 8));
Key := (byte(x) + Key) * C1 + C2;
Inc(i, 2);
end;
end;
var
begin
ShortDateFormat := 'dd/mm/yyyy';
with DM do
begin
Path := Arq.ReadString('CONFIG', 'DATABASE', ExtractFilePath(Application.ExeName) + 'CONFIG');
PathImage := Arq.ReadString('IMAGEM_FUNDO','IMAGEN',PathImage);
PathSkin := Arq.ReadString('SKIN','SKIN',PathSkin);
UserBD := Decrypt(Arq.ReadString('DATABASE', 'Username', Encrypt('SYSDBA', 7834)), 7834);
PassDB := Decrypt(Arq.ReadString('DATABASE', 'Password', Encrypt('masterkey', 7834)), 7834);
end;
FrmConfig.ShowModal;
FrmConfig.Free;
begin
If OpenDialog1.Execute Then
edtPatch.Text:= OpenDialog1.FileName;
end;
begin
If OpenDialog1.Execute Then
EdtImagen.Text:= OpenDialog1.FileName;
end;
begin
If OpenDialog1.Execute Then
EdtSkin.Text:= OpenDialog1.FileName;
end;
Var
Cfg,Arq: TIniFile;
begin
begin
PathBD := EdtPatch.Text; { Path do Banco de Dados }
UserBD := edtUserDB.Text; { Usuario do Banco de Dados }
PassDB := edtPassDB.Text; { Senha do Banco de Dados }
Path:=EdtPatch.Text; {a variavel recebeo conteudo puxado pelo edit ao solicitar o acesso a outro banco e dados}
PathImage:=EdtImagen.Text; { Path das imagens }
PathSkin:=EdtSkin.Text; { Path das Skins }
PathBD := EdtPatch.Text { Path do Banco de Dados }
{Ip, Porta e Path do Banco de Dados }
Arq:= TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
Arq.WriteString('CONFIG','DATABASE',Path); //Grava o conteudo escrito no Edit no arquivo .ini
Arq.WriteString('IMAGEM_FUNDO','IMAGEN',PathImage);
Arq.WriteString('SKIN','SKIN',PathSkin);
Arq.WriteString('DATABASE', 'Username', Encrypt(UserBD, 7834));
Arq.WriteString('DATABASE', 'Password', Encrypt(PassDB, 7834));
Arq.Free;
end;
Close;
end;


em 19/3/2008 14:50 - Responder

Devmediaem 19/3/2008 19:00 - Responder

Tathianaem 20/3/2008 15:07 - Responder


em 25/3/2008 09:06 - Responder


em 5/5/2008 16:12 - Responder


em 3/6/2008 11:33 - Responder
Space do autor

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL


10
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!