ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problema com criptografia de String (Android)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
maria.rosario
Novato
Novato


Registrado: Domingo, 30 de Agosto de 2009
Mensagens: 15

MensagemEnviada: Ter Out 18, 2016 4:50 pm    Assunto: Problema com criptografia de String (Android) Responder com Citação

Uso o seguinte código de criptografia para criar um serial para meus sistemas. Funciona perfeitamente com aplicação desktop, nunca me deu dor de cabeça. Só que agora eu criei um App pra Android pra ficar gerando esses seriais, só que ele não encripta e desencripta corretamente no Android.
Embora esteja usando a mesma chave, no aplicativo Windows ele gera diferente da do Android, e preciso que seja fiel o serial, tanto gerado em um como em outro, ou seja, encriptar no Desktop e desencriptar no App Android e vice versa.

Código:

Function Criptografia(Action, Src: String): String;
Label
Fim;
var
KeyLen, KeyPos, OffSet, SrcPos, SrcAsc, TmpSrcAsc, Range : Integer;
Dest, Key : String;
begin
if (Src = '') Then
begin
Result:= '';
Goto
Fim;
end;
Key := 'YFHJJSDDER'; {Chave de exemplo}
Dest := '';
KeyLen := Length(Key);
KeyPos := 0;
SrcPos := 0;
SrcAsc := 0;
Range := 256;
if (Action = UpperCase('C')) then
begin
  Randomize;
  OffSet := Random(Range);
  Dest := Format('%1.2x',[OffSet]);
  for SrcPos := 1 to Length(Src) do
  begin
  Application.ProcessMessages;
  SrcAsc := (Ord(Src[SrcPos]) + OffSet) Mod 255;
  if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1;
  SrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
  Dest := Dest + Format('%1.2x',[SrcAsc]);
  OffSet := SrcAsc;
  end;
end
Else if (Action = UpperCase('D')) then
begin
  OffSet := StrToInt('$'+ copy(Src,1,2));
  SrcPos := 3;
  repeat
  SrcAsc := StrToInt('$'+ copy(Src,SrcPos,2));
  if (KeyPos < KeyLen) Then KeyPos := KeyPos + 1 else KeyPos := 1;
  TmpSrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
  if TmpSrcAsc <OffSet>= Length(Src));
end;
Result:= Dest;
Fim:
end;


Pra encriptar: MeuEdit.text := Criptografia('C',MeuEdit.text );
Pra Desencriptar: MeuEdit.text := Criptografia('D',MeuEdit.text );

Peço ajuda!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Ter Out 18, 2016 8:42 pm    Assunto: Responder com Citação

Recomendo a leitura do post:
http://www.activedelphi.com.br/forum/viewtopic.php?t=91873&highlight=
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
maria.rosario
Novato
Novato


Registrado: Domingo, 30 de Agosto de 2009
Mensagens: 15

MensagemEnviada: Qua Out 19, 2016 11:27 am    Assunto: Responder com Citação

strak2012 escreveu:
Recomendo a leitura do post:
http://www.activedelphi.com.br/forum/viewtopic.php?t=91873&highlight=


Tendo por base no post indicado, eu fiz a seguinte mudança:

de -=> for SrcPos := 1 to Length(Src) do
para -=> for SrcPos := 0 to Length(Src) -1 do

Até que agora está criptografando e desencriptando normal no Android, mas o resultado do App no Android comparado ao do Windows, ficam diferentes utilizando a mesma chave. Por exemplo, se eu encriptar um texto no App do Android, e levar o resultado para o Windows, ele desencripta errado, e vice versa.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Qua Out 26, 2016 11:30 am    Assunto: Responder com Citação

Ponto 1 - sabendo que o index em android inicia em 0 e não em 1 revise onde você faz tratamento de posição como por exemplo:
SrcPos := 3 <- se o windows usa 3 no android deverá usar 2
como este exemplo pode haver mais locais onde precise revisar os indexs.

Ponto 2 - Verifique os numeros randons se são os mesmo em windows e no android logo depois da chamada Randomize;

talvez precise usar o randseed em vez do randomize;
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB