|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
maria.rosario Novato
Registrado: Domingo, 30 de Agosto de 2009 Mensagens: 15
|
Enviada: Ter Out 18, 2016 4:50 pm Assunto: Problema com criptografia de String (Android) |
|
|
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 |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
|
Voltar ao Topo |
|
|
maria.rosario Novato
Registrado: Domingo, 30 de Agosto de 2009 Mensagens: 15
|
Enviada: Qua Out 19, 2016 11:27 am Assunto: |
|
|
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 |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Out 26, 2016 11:30 am Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|