Gravar arquivo criptografando

Delphi

24/09/2004

iai pessoal... acabei de me cadastrar no forum :)

eu estou tentando criptografar um arquivo para ser gravado posteriormente da seguinto maneira

// suplonha q eu tenha uma variavel String chamada S
// ela vai receber um valor do grid criptografando o msm
// depois grava num arquivo TextFile q eu criei.

// oq eu queria fazer era +/- isso
    s:= IntToStr(StrToInt(gridC.cells[0,1])+150);
    writeln(vFile, S);

sei q não funciona pq ele não aceita converter um nome de pessoa, por exemplo, em inteiro...
a ideia seria essa... converter para um texto para numerico, adicionar um valor, e depois gravalo
para abrir o arquivo seria feito o seguinte
 S:=  IntToStr(StrToInt(readln(vFile))-150);


agradeço qualquer ajuda :twisted: [/code]


Niflheim

Niflheim

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

24/09/2004

S : String;
s:= gridC.cells[0,1] + IntToStr(150); 
writeln(vFile, S); 



GOSTEI 0
Niflheim

Niflheim

24/09/2004

blz kra... mas isso ai nao vai indexar o valor do grid com o 150 ????
tipo, ficaria assim
rafael150

:wink:
oq eu queria era pegar o valor em numerico ai eu somo um valor qualquer e depois gravo, assim o nome
rafael

seria gravado como
fedgse

por exemplo

:roll:


GOSTEI 0
Rômulo Barros

Rômulo Barros

24/09/2004

blz kra... mas isso ai nao vai indexar o valor do grid com o 150 ???? tipo, ficaria assim [quote:6623b47503]rafael150

:wink:
oq eu queria era pegar o valor em numerico ai eu somo um valor qualquer e depois gravo, assim o nome
rafael

seria gravado como
fedgse

por exemplo

:roll:[/quote:6623b47503]

:arrow: Pra ser sincero... Não entendi nada

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:


GOSTEI 0
Niflheim

Niflheim

24/09/2004

hehehehe... olha soh

vamos supor q eu tenha no grid o valor ´A´
se eu simplesmente mandar gravar no arquivo texto ele ficaria gravado o ´A´ nesse arquivo certo? qualquer pessoa q abrisse o arquivo poderia ler as informações gravadas
por isso eu quero alterar esse valor...
tipow... A + 150
o valor do A em decimal seria 65, com mais 150 ficaria 215
entao ele gravaria no arquivo o ´Î´ que eh o valor em caracter para o 215

esta entendendo :?:


GOSTEI 0
Rômulo Barros

Rômulo Barros

24/09/2004

[quote´´Vc Escreveu´]o valor do A em decimal seria 65, com mais 150 ficaria 215


Como isso é possível? ´A´ é ´A´ .... ´65´ é ´65´


GOSTEI 0
Niflheim

Niflheim

24/09/2004

65 eh o codigo ascii para o A
entaum se eu converter o A para decimal ficaria 65

em C/C++ isso eh bem facil, mas no delphi eu nao sei como fazer :s

faça o teste
tecle ai:
Alt + 65

isso resulta no A certo???
tente o seguinte agora
Alt + 215

isso resulta no Î

era isso q eu tava dizendo...
como eu faço para pegar o valor ascii de uma letra... alias
eu preciso converter a string inteira... tem como?


GOSTEI 0
Mago M3rl1n

Mago M3rl1n

24/09/2004

Para saber o valor ASCII de um caracter, utilize a função ORD.


GOSTEI 0
Niflheim

Niflheim

24/09/2004

ops... demorei mas voltei :P
ORD

uhmm blz intaum...

acho q o geito eh fazer isso convertendo caracter por caracter msm :?
entaum qual eh a função q retorna o tamanho de uma string???


GOSTEI 0
Gandalf.nho

Gandalf.nho

24/09/2004

A função que retorna o tamanho de uma string é [b:9e5b7a3f37]Length[/b:9e5b7a3f37]


GOSTEI 0
Niflheim

Niflheim

24/09/2004

ok pessoal valew... :)

vou fazer esse esquema ai depois eu posto no forum de exemplo e mini programas...

tem isso aqui tbm? :lol:
vou dar uma olhada...

obrigado pela ajuda pessoal :wink:


GOSTEI 0
Niflheim

Niflheim

24/09/2004

Pronto Pessoal... jah esta pronto o esquema de criptografar o arquivo antes de salva-lo q eu queria fazer...

eu vi q tem uma seção dicas aqui..
pra quem eu mando para q postem???


GOSTEI 0
Dopi

Dopi

24/09/2004

Só por curiosidade....

O que acontece se você ultrapassar o 255.... A tabela ASC 2 acaba no 255.

Ex: ç = 135 Somando 150 temos 285 que não existe na tabela ASC2...

Uma vez fiz uma rotina so genero que invertia a posição dos 2 ultimos digitos da tabela ASC.

Ex: (A) 65 = 56 (8)), (ç) 135 = 153 (Ö), Assim não havia perigo de ´estouro´....

Mas essa rotina aqui faz um ´estrago´ bem maior...... usando xor.
/////////////////////////////////////////////////////////
function StrCrypt(mStr, mChave: string): string;
/////////////////////////////////////////////////////////
var
  i, TamanhoString, pos, PosLetra, TamanhoChave: Integer;
begin

Result := mStr;
TamanhoString := Length(mStr);
TamanhoChave := Length(mChave);

for i := 1 to TamanhoString do begin
   pos := (i mod TamanhoChave);
   if pos = 0 then
      pos := TamanhoChave;

   posLetra := ord(Result[i]) xor ord(mChave[pos]);
   if posLetra = 0 then
      posLetra := ord(Result[i]);

   Result[i] := chr(posLetra);
end;

end ;



Use a mesma chave ´string´ para embaralhar e desembaralhar....


GOSTEI 0
Beppe

Beppe

24/09/2004

O que acontece se você ultrapassar o 255.... A tabela ASC 2 acaba no 255.

Os bits restantes seram ignorados, apenas os 8 bits mais significativos seram considerados no caractere.

Assert(Chr(AlgumInteiro) = Chr(AlgumInteiro and $ff));


GOSTEI 0
Niflheim

Niflheim

24/09/2004

Os bits restantes seram ignorados

exato... isso eh feito de uma forma muito grotesca... ele simplesmente corta os bits sem acusar erro nem ecxeções...
eu tinha esquecido desses caracteres com acentuação... :?
gostei desse teu metodo Dopi... vou pensar em fazer alguma coisa desse tipo
valew :D


GOSTEI 0
Beppe

Beppe

24/09/2004

O Delphi não levanta exceções porque nós desabilitamos isto. Vá nas opções do projeto e marque ´Range checking´. Pode fazer localmente tb com diretivas.


GOSTEI 0
Paulo_amorim

Paulo_amorim

24/09/2004

Olá

Já fiz umas rotininhas bobas de criptografia pra eu mandar emails, mas nada muito sério:

- Pode-se usar o mesmo usado para criptografia simples de e-mail, que troca o A pelo N, B por O, etc...

- Pode-se adicionar Ord + 10 se o Ord for par, Ord + 18 se for ímpar por ex. (não se esquecer que se adicionar/subtrair PAR em um, tem que ser PAR no outro e vice-versa, senão dá pau)

- Pode-se adicionar um número se o Ord for até um número (p.ex. 90) e acima disso subtrair um número (se o Ord > que 90, p.ex.)

Essas rotinas prevêm o corte de bits pois nunca atingem 255

Espero que ajude
AtÉ+


GOSTEI 0
Niflheim

Niflheim

24/09/2004

esqueci de mandar o fonte q eu criei neh :?
ai vai :wink:
procedure TFrmPrincipal.GravarDados;
var
   vLin, vCol : Integer;
   vFile : TextFile;
   cripto: string;
begin
    //Associa arquivo ao nome gravado no dlgSalvar
    AssignFile(vFile, dlgSalvar.FileName);
    // Cria um novo arquivo esterno com o nome associcado
    ReWrite(vFile);

    FOR vLin := 1 TO grdContatos.RowCount - 2 DO
       FOR vCol := 0 TO 3 DO
       begin
          // Criptografa o valor da Celula e atribui o mesmo a cripto
          cripto := criptografar(grdContatos.Cells[vCol, vLin], true);
          // Grava conteudo do grid no arquivo e pula para proxima linha
          WriteLn(vFile,cripto);
       end;
    // Fecha a associacao entre a variavel e o arquivo externo
    CloseFile(vFile);
    showMessage(´Arquivo Salvo com Sucesso.´);
    // Mostra para o usuario q o arquivo foi salvo

end;

para criptografia essa eh a função:
function TFrmPrincipal.criptografar(S: string; Opc: boolean): string;
var aux: string;
    i: integer;
begin
    // Limpa Variavel Aux
    aux := ´´;
    // Repete de 1 ate o tamanho da String passada por parametro
    for i:= 1 to Length(s) do
    begin
        // Se opcao eh gravacao
        if Opc then
          aux:= aux + Chr(Ord(s[i])+35)
        else // Se for Leitura
          aux:= aux + Chr(Ord(s[i])-35)
    end;
    Result := aux;
end;



GOSTEI 0
Cebikyn

Cebikyn

24/09/2004

eu vi q tem uma seção dicas aqui.. pra quem eu mando para q postem???


Pode postar, da mesma maneira que você fez na seção Delphi, quando criou este tópico.


GOSTEI 0
Niflheim

Niflheim

24/09/2004

opsssss :oops:
nessa eu fui bem limitado.... eu nem tentei postar lah pra ver se eu conseguia :roll: heheheh

falow pessoal...

vou fazer tbm os outros metodos q vcs citaram ... :wink:


GOSTEI 0
POSTAR