chodnik napisał(a)
Keystore to plik, więc może być lokalnie a może być dostępny przez URL, jak chcesz.
Z tego co piszesz że chcesz, to hasło musi być w programie, więc wydaje mi się, że nie ma bezpiecznego sposobu osiągnięcia tego.
OK, nie upieram się - klucz nie musi być koniecznie w kodzie programu. Ale nawet jeżeli będzie gdzieś na zewnątrz - np. we wspominanym przez Ciebie Keystore, to pewnie jak ktoś się uprze, to też znajdzie jakiś sposób, żeby wydobyć z tego pliku klucz? Więc to również będzie tylko (a zarazem "aż") utrudnienie?
chodnik napisał(a)
Można jedynie utrudnić odnalezienie. A to można osiągnąć używając złożonego algorytmu szyfrującego, np. kilka różnych algorytmów po sobie z dodanymi jakimiś przesunięciami. Układ wywołań kolejnych kroków będzie stanowił program i wtedy odczytanie samego hasła niewiele da, bo konieczna będzie znajomość sekwencji i rodzaju użytych algorytmów. Dodatkowo kolejne kroki mogą zależeć od samej treści hasła (instrukcje if else w zależności od wartości któregoś bajtu w tablicy).
Czyli jak rozumiem chodzi tu o utrudnienie analizy kodu? Wobec tego - czy jest w ogóle sens kompilowania do kodu natywnego, czy pozostawić kod w plikach .jar? Bo jeżeli zostawię w .jar, to analiza będzie na poziomie kodu wysokopoziomowego (Java), a jak skompiluję do np. .exe, to analizować będzie przy pomocy jakiegoś edytora plików binarnych, lub nawet kod assemblera. Więc gdzie będzie trudniej? Czy warto sobie w ogóle zawracać głowę kompilacją do exe?
chodnik napisał(a)
Ewentualnie jako hasła możesz użyć funkcji skrótu z zapisanej tablicy bitowej, to się wydaje prostsze.
private static final byte[] keyValue =
new byte[] { 'T', 'h', 'i', 's', 'I', 's', 'A', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y' };
http://lkamal.blogspot.com/2009/10/java-encrypt-decrypt-jce-salt.html
Czy chodzi może o to, żeby na tej zmiennej keyValue użyć jednokierunkowej funkcji hashującej (np. SHA1)?