String str = “uma string a ser escondida…”
byte [] byteString = str.getBytes();
…
String strDeNovo = new String(byteString);
O problema é que se eu gravar o resultado de str.getBytes() em um arquivo, logo após a 2a. linha como faço para ler de volta deste arquivo e obter a string original. Se a leitura for direta, sem a gravação do arquivo, funciona perfeitamente.
Cara, não sei se é isso que você quer fazer, mas se for, tá aí uma colher de chá pra você…
Dica, sempre procure dar uma pesquisada no javadoc antes. Isso poderia ter te respondido muitas dúvidas…
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class StringReader {
public static void main(String[] args) {
String word = "Grupo de Usuários Java - GUJ";
System.out.println(word);
byte[] arrayBytes = word.getBytes();
try {
FileOutputStream fos = new FileOutputStream("teste.txt");
fos.write(arrayBytes);
fos.close();
FileInputStream fis = new FileInputStream("teste.txt");
byte[] newArrayBytes = new byte[fis.available()];
fis.read(newArrayBytes);
fis.close();
String newWord = new String(newArrayBytes);
System.out.println(newWord);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Isso vai criar o arquivo que você citou na raiz do seu projeto…
Desde já obrigado pela força e acima de tudo um trilhão de desculpas pois a explicação que coloquei está mesmo uma porcaria.
O que gostaria de fazer é:
1 - Usar um arquivo de Properties para gravar strings de SQL (algumas com mais de 40 linhas). Trata-se de uma aplicação legada sobre a qual não tenho muito controle e na qual a utilização de SQL direto é de fato a melhor opção: o SQL está pronto!!!
2 - Não gostaria que o SQL fosse exposto em texto claro pois expõe muito uma determinada lógica de negócio (auditoria de uso de cartões e identificação de fraude). Saber o critério descrito no SQL eliminaria a sua eficiencia. (É claro que aqui estou tentando apenas afastar apenas os curiosos; níveis adicionais de segurança devem ser obtidos com obfuscadores e bons advogados)
3 - Vi uma idéia aqui no guj que achei interessante. Gravar no arquivo de properties a string do SQL com getBytes(). No arquivo properties ficaria algo do tipo “string_SQL_Limite_Uso=#4%]b3$7(9&”
4 - Na execução da aplicação eu faria a leitura do arquivo de properties e recuperaria este array, voltando para a string original (é ai que imagino que a leitura da documentação seja importante, pois não sei se isto é possível)
5 - Além disto já estou começando a usar o Proguard para a obfuscação e me parece que ele também inclui os arquivos de properties do projeto se for orientado para isto. Isto seria uma camada adicional (e indispensável) de segurança
Espero ter sido mais claro com relação ao que pretendo fazer e novamente agradecer a ajuda de Vocês.
Eu sei que por mais que deseje esconder o SQL não posso eliminar 100 % a possibilidade de sua visualização. Por exemplo, uma ferramenta de trace que o BD disponibilize faz isto com facilidade mas pelo menos o grau de exposição é muito menor.
De qualquer forma valeu mesmo pela dica. Vou testar e se Você não se importar eu coloco o código para a sua análise ok?
Antes tarde do que nunca
O seu problema é o getBytes() em um arquivo texto como o *.properties
transforme o seu getBytes() para Hexadecimal e grave
na hora de ler faça o processo contrario
as coisas vão ficar como o dobro do tamanho, mais vai dar certo com certeza