Página 1 de 2
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 12 Dez 2016 19:45
por fladimir
Pessoal... alguém q atualizou recentemente o Harbour para versão similar a q entitula o tópico teve algum problema com as funções hb_crypt e hb_decrypt?
Atualizei devido a questão do envio de email via hotmail com TipMailSend etc... mas depois q atualizei, esta aparentemente normal, com excessão de arquivos existentes previamente criptografados com a função hb_crypt não estão mais sendo corretamente descriptografados com hb_decrypt
Ou seja...
Antes eu usava a 3.4 versão de junho e ao entrar no sistema em determinada função pedia uma senha e eu gravava um arquivo criptogrado da seguinte forma:
E lia o arquivo para validar da seguinte forma
Código: Selecionar todos
cConteudoArq := alltrim(memoread(cArq))
cConteudoArq := hb_decrypt( cConteudoArq )
E o resultado comparava com o serial, mas agora debugando o arquivo é lido mas ao descriptografar aparecem simbolos ao inves do conteudo correto q seria o serial.
Pra tirar a dúvida rodei uma EXE anterior ao harbour novo e esta lendo correto.
Esta rotina não foi modificada após a atualização do Harbour apenas a aplicação recompilada.
Alguém saberia dizer se seria um BUG ou como testo de outra forma?
Se eu apagar o arquivo e recriar o mesmo liberando a partir do EXE compilado com o HB34 atual o problema para, mas o ruim é q se eu por em campo todos os clientes vão ter q ser revalidados além de outros locais do sistema q utilizam a hb_crypt/hb_decrypt darem problema.
Não sei se tem a ver mas com o HB34 recente começou a pedir em campo 2 dlls q antes não pediam q são:
[]'s
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 12 Dez 2016 21:20
por JoséQuintas
Ao que parece, as funções são das DLLs e não do Harbour.
Em último caso, ao baixar os fontes do GitHub, dá pra ver todo histórico, e até desfazer modificações.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 12 Dez 2016 21:45
por Jairo Maia
Olá Pessoal,
Será que pode ser algum problema com o segundo parâmetro que não está sendo informado, então chega como Nil?
Não sei se pode ser, mas como ele deve ser caractere, tente: cConteudoArq := hb_decrypt( cConteudoArq, "" )
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 00:17
por fladimir
JoséQuintas escreveu:Ao que parece, as funções são das DLLs e não do Harbour.
Em último caso, ao baixar os fontes do GitHub, dá pra ver todo histórico, e até desfazer modificações.
Obrigado Quintas. Olhei mas não vi nada explicito ao problema.
Jairo Maia escreveu:Olá Pessoal,
Será que pode ser algum problema com o segundo parâmetro que não está sendo informado, então chega como Nil?
Não sei se pode ser, mas como ele deve ser caractere, tente: cConteudoArq := hb_decrypt( cConteudoArq, "" )
Obrigado Jairo, pode talvez ser algo nesse sentido, apesar q o segundo parametro não é obrigatório pode estar afetando, vou verificar.
Em todo caso eu retornei a versão q utilizava para efeito de testes e sem modificar nada passou, vou proceder com testes em paralelo e caso consiga algo posto aki, se não tento atualizar mais pra frente ou modificar as hb_crypt por outras mesmo.
Percebi q a função hb_crypt e hb_decrypt são da xhb.hbc, talvez tenha alguma incompatibilidade com alguma mudança q o Viktor tenha feito, talvez mudar para outra (alguém conhece alguma), no CT.lib tem a Crypt mas não achei a Decrypt, mas isso seria outro assunto.
[]´s
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 00:23
por fladimir
Testei e não é o segundo parametro aparentemente, passei como '', como ' ' e tb não deu.
[]´s
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 01:24
por lucimauro
2016-12-13 01:04 UTC Viktor Szakats (vszakats users.noreply.github.com)
* contrib/xhb/hbcrypt.c
! HB_CRYPT()/HB_DECRYPT(): fix 13 years old bug to avoid returning
_non-deterministic_ result if the second parameter (cKey) is not passed
or not a string. The key will now be a single zero byte in this case.
Passing an empty string results in the same key. Notice however that
encrypting without a key makes no sense and even the in-source comments
suggest a key length of 6 characters minimum.
Código: Selecionar todos
LOCAL a, b, c, d
? hb_StrToHex( a := hb_Crypt( "hello" ) )
? hb_StrToHex( b := hb_Crypt( "hello", "" ) )
? hb_StrToHex( c := hb_Crypt( "hello", Chr( 0 ) ) )
? hb_StrToHex( d := hb_Crypt( "hello", "1" ) )
? hb_Decrypt( a )
? hb_Decrypt( b, "" )
? hb_Decrypt( c, Chr( 0 ) )
? hb_Decrypt( d, "1" )
After this update these functions will behave predictably regardless
of C compiler or runtime environment, but these results may differ
from the faulty/random results previously returned when called with
an invalid/missing cKey.
I strongly suggest to avoid these custom crypto functions and use
hb_blowfish*() in core instead. Or even better use AES128/AES256
(in non-ECB mode) if such functionality is accessible.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 01:27
por lucimauro
Desculpem tinha mandado a mensagem varias vezes.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 02:28
por fladimir
Obrigado por tirar a dúvida...
então pelo q entendi... como eu atualizei ontem dia 12 não tinha nada no Changelog somente hj dia 13 explicando o q ocorreu.
vlw
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 09:33
por Jairo Maia
Olá Pessoal,
Viktor Szakats escreveu:! HB_CRYPT()/HB_DECRYPT(): fix 13 years old bug to avoid returning _non-deterministic_ result if the second parameter (cKey) is not passed or not a string.
Não deu prá entender...
Sempre usei essas funções com o segundo parâmetro e como caractere, mas corrigido hoje um bug que existe há 13 anos? Como assim se o Fladimir usava a versão 3.4 de junho e funcionava? Enfim...
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 09:38
por fladimir
É essa parte eu tb não entedi, esta funcionando tudo ok aki... deve ser algum detalhe q em determinado tipo de uso ou conteudo dava problema... mas q bom q confirmou q realmente foi mexido...
Agora parece q ele sugeriu o uso de outras essa parte q quero dar uma olhada melhor em quais vantagens etc.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 13 Dez 2016 22:37
por Pablo César
Pra mim está dando falhas e acredito que faz tempo sim. Eu já passei por isso anteriormente, mas pensei que pudera ser falha minha na utilização.
Agora quanto ao segundo parâmetro do tipo caracter, vejo que as vezes dá as vezes não...

- Screen37.png (10.74 KiB) Exibido 2005 vezes
Código: Selecionar todos
Function Main()
LOCAL a, b, c, d, e
SetMode(25,80)
? hb_StrToHex( a := hb_Crypt( "hello" ) )
?? " ->" + Space(2) + hb_Decrypt( a )
? hb_StrToHex( b := hb_Crypt( "hello", "" ) )
?? " ->" + Space(2) + hb_Decrypt( b, "" )
? hb_StrToHex( c := hb_Crypt( "hello", Chr( 0 ) ) )
?? " ->" + Space(2) + hb_Decrypt( c, Chr( 0 ) )
? hb_StrToHex( d := hb_Crypt( "hello", "1" ) )
?? " ->" + Space(2) + hb_Decrypt( d, "1" )
? hb_StrToHex( e := hb_Crypt( "hello", 1 ) )
?? " ->" + Space(2) + hb_Decrypt( e, 1 )
Inkey(0)
Return Nil
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 14 Dez 2016 08:50
por fladimir
Obrigado pelos esclarecimentos Pablo...
No meu caso deve ser pq como eu gravava antes (lado esquerdo) algo e para comparar pegava da direita para esquerda X casas não visualizava problema.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 14 Dez 2016 13:37
por Jairo Maia
Olá Pessoal,
Pablo, realmente também verifiquei a mesma coisa sim tanto em 3.0 e 3.2 usando o exemplo (não tenho o 3.4). E interessante, note que apenas as opções "c" e "d" estão corretas, pois possuem o segundo parâmetro caractere e não vazio. Na opção "b" que tem o segundo parâmetro caractere mas vazio, também não funciona.
Como sempre usei essas funções com ambos parâmetros, então não havia notado isso e me orientei pela informação do Fladimir, mas o Viktor tem razão sim. O bug existia há anos e foi corrigido agora.
Quanto a essa função que ele recomenda usar em substituição a essas, a saber hb_blowfish(), até pesquisei na internet, mas não achei nada. Se alguém souber sobre ela seria legal compartilhar.
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 14 Dez 2016 22:25
por Pablo César
Oi Jairo, pois é, Viktor tem razão. Eu há anos atrás tinha visto essa função do blowfish (sem hb_ naquela época).
Deixar eu ver pra você...
http://www.harbourdoc.com.br/show.asp?s ... hEncrypt() (doc)
http://bernard.mouille.free.fr/0_Harbou ... 00002.html (exemplo, em francês)
Na minha opinião, é muito importante perder um tempinho sempre para relatar possiveis bug. É a única forma de melhorar algo.
Eu tinha percebido algo, mas pensei que era o meu mal manejo com a função...
Posso até parecer chato, mas hoje em dia eu perco um tempinho mas eu relato...
HB_Crypt Harbour 3.4.0 dev (e1b944) 2016-12-09
Enviado: 15 Dez 2016 08:39
por Jairo Maia
Valeu Pablo, vou testar. Obrigado.