Array
(
)

Gravar arquivo criptografando

Niflheim
   - 24 set 2004

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

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

#Código

// 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
#Código
S:=  IntToStr(StrToInt(readln(vFile))-150);


agradeço qualquer ajuda


Rômulo Barros
   - 24 set 2004

#Código

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



Niflheim
   - 24 set 2004

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

Citação:
rafael150

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

Citação:
rafael

seria gravado como

Citação:
fedgse

por exemplo

:roll:


Rômulo Barros
   - 24 set 2004


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

Citação:
rafael150

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

Citação:
rafael

seria gravado como

Citação:
fedgse

por exemplo

:roll:


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

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


Niflheim
   - 24 set 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 :?:


Rômulo Barros
   - 24 set 2004


Citação:
´´Vc Escreveu´]o valor do A em decimal seria 65, com mais 150 ficaria 215


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


Niflheim
   - 24 set 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:
#Código

Alt + 65

isso resulta no A certo???
tente o seguinte agora
#Código
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?


Mago M3rl1n
   - 24 set 2004

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


Niflheim
   - 24 set 2004

ops... demorei mas voltei :P
#Código

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???


Gandalf.nho
   - 24 set 2004

A função que retorna o tamanho de uma string é Length


Niflheim
   - 24 set 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:


Niflheim
   - 28 set 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???


Dopi
   - 28 set 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.
#Código


/////////////////////////////////////////////////////////
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....


Beppe
   - 28 set 2004


Citação:
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));


Niflheim
   - 28 set 2004


Citação:

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


Beppe
   - 30 set 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.


Paulo_amorim
   - 30 set 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É+


Niflheim
   - 30 set 2004

esqueci de mandar o fonte q eu criei neh :?
ai vai :wink:
#Código

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:
#Código
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;



Cebikyn
   - 30 set 2004


Citação:
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.


Niflheim
   - 30 set 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: