Pessoal é o seguinte eu tenho Metodo que uso nas linguagens que programo para criptografar strings, em delphi, php e java eu uso o mesmo metodo, quando salvo na base de dados blz, mas quando eu retorno o valor inserido na base de dados não vem como tá na base de dados em java:
Seu problema não deve está ligado ao seu código mas sim com relação a codificação do teu banco de dados, procure ver se quando vc salva no banco de dados está em UTF-8, verifique também se a string que vc está enviando está em UTF-8
tipo para vc ter uma ideia codificação é o que “transforma” letras em números exemplo a letra “A” em binário é “0100 0001” mas isso na codificação ASCII pode ser que em uma outra codificação o numero “0100 0001” represente o caractere “£”, e geralmente quando se retorna “�” é porque aquele valor não corresponde a nenhum que exista na codificação atual ou seja um numero que não tem uma letra ou caractere assinalado na codificação
também se sua necessidade é criptografia é melhor da uma olhada nas criptografias já mais usadas é comuns como o MD5 e o SHA-2 pode ser que eles te ajude bastante,
além disso você unir uma criptografia com outra por trás faz seu código ser muito mais difícil de decifrar se vc pegar o resultado da sua criptografia e criptografar ela em MD5, se um hacker ver vai pensar a isso é MD5 mas quando descriptografar ele vai ver um resultado loko é vai pensar q deu errado
xD qualquer dúvida só falar
V
VictorLacerda
mal outro sem nessecidade
matheusgeres
Amigo,
Em minha humilde opinião, converta a string em MD5, o que está ocorrendo é que seu collation, tipo de dados alfanumérico, está incompatível com o Java, que no caso deve ser UTF8. Com MD5 você simplifica tudo isto, o único porém é que não é possível desfazer a chave. Caso você queira manter sua rotina, retire o caracteres especiais e o seu problema também será resolvido.
D
danillorc
eu não sei se é codificação do banco de dados pois é em firebird 1.5, e o problema é que tenho q acessar base de sistema antigo feito em delphi, como falei essa mesma rotina funciona perfeito em php e delphi.
D
danillorc
E em java tambem funciona o problema é pegar essa informação da base de dados em java, quando acesso a mesma base usando o delphi e php dá de boa, mas usando o java não rola, isso somente quando pego da base de dados em java
matheusgeres
Não tenha dúvidas, o problema é esse mesmo, a codificação que você está passando do Java para o Firebird não é a mesma, o fato das outras aplicações funcionarem é justamente rodarem já no collation que você necessita.
matheusgeres
Bom, se você grava pelo Java e funciona, pode ser problemas no Driver.
Você tentou gravar pelas suas outras aplicações depois de gravar no banco com o Java?
Já tentou atualizar? Utilizar algum oficial ou genérico? Isso pode gerar erro também.
eu to usando a biblioteca jaybird-full-2.2.0.jar, a base de dados foi feita em no firebird 1.5, e na minha máquina está instalada o firebird 2.5, rsrs de repente pode ser essas versões desencontradas.
matheusgeres
Não tenha dúvidas, elimine possibilidade a possibilidade, ou utilize a biblioteca que nosso amigo postou, ou passe para MD5, que é padrão em qualquer linguagem.
D
danillorc
O problema não é outra criptografia, eu poderia está usando base64, md5, o problema é essa rotina que quero que funcione, e na realidade eu até uso md5
matheusgeres
Fico como desafio, você tem os possíveis problemas, será “divertido” achar o problema.
Um abraço.
D
danillorc
O que parece é que o problema é na biblioteca que está com a codificação UTF-8 e a base de dados está com ISO-8859-1, o problema é que ele só se usa caracteres e sinais diacríticos do ocidente, o desafio agora vai ser informár o charset no momento da conexão.
Vou tentar usar o gbak, para mudar o charset.
ViniGodoy
Nossa, para que você faz isso? Você está usando um algoritmo criptograficamente fraquíssimo e adicionando complicação à toa no código?
Não seria melhor usar MD5 com SALT, ou um algoritmo de criptografia de verdade, já que isso é suportado em todas as linguagens?
D
danillorc
É como eu falei, eu tenho um sistema antigo feito em delphi, e preciso acessar a base de dados, e descriptografar, esse sistema é de 97, com firibird nem sei se já existia a criptografia md5, e eu hoje já uso md5, mas preciso dessa hotina pra acessar a base antiga e atualizalo.
ViniGodoy
Para não se incomodar com encoding nesse momento, você pode simplesmente criar um map com o valor dos bytes da String no padrão antigo e no novo, e tratar a String como um array de bytes comum.
Afinal, após “decodificado”, você acabará com um texto em ascii padrão na mão.