Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 8:45 am Assunto: Problemas Criptografia |
|
|
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 |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sex Jul 21, 2017 10:10 am Assunto: |
|
|
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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Jul 21, 2017 10:18 am Assunto: |
|
|
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 |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 10:53 am Assunto: |
|
|
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 |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 10:59 am Assunto: |
|
|
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 |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sex Jul 21, 2017 11:02 am Assunto: |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Jul 21, 2017 11:11 am Assunto: |
|
|
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 |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 1:32 pm Assunto: |
|
|
Testei com a opção Integer e LongInt.
Mesma coisa.
Se puder, testa com a palavra inteira: RELATORIO ....E AS DATAS. |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Jul 21, 2017 1:50 pm Assunto: |
|
|
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 |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 4:37 pm Assunto: |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Jul 21, 2017 4:45 pm Assunto: |
|
|
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 |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Jul 21, 2017 5:08 pm Assunto: |
|
|
Sim, alterei.
Fiz um teste agora usando as suas chaves e funcionou.
Não entendo o motivo. |
|
Voltar ao Topo |
|
 |
|