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 

Problemas Criptografia

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 8:45 am    Assunto: Problemas Criptografia Responder com Citação

Estou com algum BUG nesse código, vejam o que acontece.

Function:

Código:
Function CryptaLog(Opcao : String; Dados : String): String;
var
 I : Integer;
 Key : Word;
 Res : String;
 const
  C1 = 14587;
  C2 = 69853;
  Chave = 85479;
begin
  Key := Chave;
  for I := 1 to length(Dados) do
  begin
   Res := Res + Char(Byte(Dados[I]) xor (Key shr 8));
   if Opcao = 'CRYPT' then
   Key := (Byte(Res[I]) + Chave) * C1 + C2;
   if Opcao = 'DECRYPT' then
  Key := (Byte(Dados[I]) + Chave) * C1 + C2;
end;
 Result := Res;
end;


Codigo:
Código:
 
    frmdm.qrLogOPERACAO.AsString:= CryptaLog('CRYPT','RELATORIO CONTAS A RECEBER: '+ DateToStr(dtpInicio.Date)+' a '+DateToStr(dtpFim.Date)+'');


Descriptografia se dá pelo GetText

Código:
Text:= CryptaLog('DECRYPT',QueryFiltroOPERACAO.AsString);


Fiz uma simulação de 01/09/2017 até 30/09/2017 e outra de 01/09/2017 a 25/09/2017

Vejam o resultado

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: Sex Jul 21, 2017 10:10 am    Assunto: Responder com Citação

Código funciona em versões do Delphi antigas e nas nova apresenta o tal bug?

Se sim é uma questão então de unicode, vai precisar usar ansistring e ansichar no código da função postada.
_________________
Tudo podemos quando tudo sabemos!


Editado pela última vez por strak2012 em Sex Jul 21, 2017 10:25 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Sex Jul 21, 2017 10:18 am    Assunto: Responder com Citação

Fiz um teste com sua função aqui e não compila com esta chave = 85479:

Erro:
Código:
Constant expression violates subrange bounds


O erro acontece porque a constante Chave deve ser até 65.535 que o limite do tipo Word.

Alterando para este limite a criptografia acontece normalmente.

Testei no Delphi XE5. Qual versão do seu Delphi? Pode ser problema no Unicode string como dito pelo strak2012.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 10:53 am    Assunto: Responder com Citação

strak2012 escreveu:
Código funciona em versões do Delphi antigas e nas nova apresenta o tal bug?

Se sim é uma questão então de unicode, vai precisar usar ansistring e ansichar no código da função postada.


Estou usando no Delphi 7, então deve ser outro problema.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 10:59 am    Assunto: Responder com Citação

natanbh1 escreveu:
Fiz um teste com sua função aqui e não compila com esta chave = 85479:

Erro:
Código:
Constant expression violates subrange bounds


O erro acontece porque a constante Chave deve ser até 65.535 que o limite do tipo Word.

Alterando para este limite a criptografia acontece normalmente.

Testei no Delphi XE5. Qual versão do seu Delphi? Pode ser problema no Unicode string como dito pelo strak2012.


Eu apenas alterei as chaves antes de postar aqui, para não ficar as mesmas que tenho nos fontes, mas os valores que tenho nessa chave são inferiores a 65535

Estou no Delphi 7
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: Sex Jul 21, 2017 11:02 am    Assunto: Responder com Citação

Nestes termos então, procure mudar o tipo da Key para integer ou longint.

Aproveitando podes tb da uma olhada nos ifs crypt e decrypt, note que a Key recebe o mesmo valor.

O que destartaria a necessidade do If se Key vai sempre receber os mesmo valores seja crypt ou decrypt.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Jul 21, 2017 11:11 am    Assunto: Responder com Citação

Faça um teste alterando o tipo da key como o Strak disse

Strak, na verdade o valor que a key recebe tem diferença, eu demorei um pouco para notar também, se você reparar, quando é CRYPT é utilizado o caracter da variável Res, a qual é gerado utilizando a variável dados juntamento com uma operação xor e shr, enquanto que para DECRYP é utilizado diretamente a variável Dados, que não passa por todo esse tratamento.

Em ralação a criptografia, fiz um teste aqui utilizando as chaves
Citação:
const
C1 = 14587;
C2 = 69853;
Chave = 65535;


fiz o teste com os textos
Citação:
01/09/2017 até 30/09/2017
01/09/2017 até 25/09/2017


ambos funcionaram, não obtive nenhum resultado diferente do original
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 1:32 pm    Assunto: Responder com Citação

Testei com a opção Integer e LongInt.
Mesma coisa.

Se puder, testa com a palavra inteira: RELATORIO ....E AS DATAS.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Jul 21, 2017 1:50 pm    Assunto: Responder com Citação

Funcionou também, fiz o teste com as strings:
Citação:
RELATORIO CONTAS A RECEBER: 01/09/2017 A 30/09/2017
RELATORIO CONTAS A RECEBER: 01/09/2017 A 25/09/2017


Faz o teste voltando a variável Key para word e utilizando as mesmas chaves que eu utilizei aqui
Citação:
const
C1 = 14587;
C2 = 69853;
Chave = 65535;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 4:37 pm    Assunto: Responder com Citação

Agora deu certo, mas da problema em outras rotinas.

Ex:

FLUXO DE CAIXA 01/09/2017 A 20/09/2017

Lista como

FLUX
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Jul 21, 2017 4:45 pm    Assunto: Responder com Citação

Foi normal.

Você alterou apenas a chave ou C1 e C2 também?

pois fiz uns testes aqui alterando apenas o valor da chave, ai ele cortou a string na hora de remover a criptografia, ai alterei C1 e C2 também e decriptou normalmente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Jul 21, 2017 5:08 pm    Assunto: Responder com Citação

Sim, alterei.

Fiz um teste agora usando as suas chaves e funcionou.
Não entendo o motivo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> 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