실제 해커가 암호를 해독 할 수는 있지만 암호를 String 리터럴로 저장하지 않으면 암호 해독이 어려워 질 수 있습니다. 당신은 사용할 수 있습니다
private static final String KEY = new String(new char[]{'s', 'e', 'c', 'r', 'e', 't'});
이 바이트 코드가 발생합니다 :
javap -c -v TestObfuscate
static {};
Code:
Stack=6, Locals=0, Args_size=0
0: new #10; //class java/lang/String
3: dup
4: bipush 6
6: newarray char
8: dup
9: iconst_0
10: bipush 115
12: castore
13: dup
14: iconst_1
15: bipush 101
17: castore
18: dup
19: iconst_2
20: bipush 99
22: castore
23: dup
24: iconst_3
25: bipush 114
27: castore
28: dup
29: iconst_4
30: bipush 101
32: castore
33: dup
34: iconst_5
35: bipush 116
37: castore
38: invokespecial #12; //Method java/lang/String."<init>":([C)V
41: putstatic #16; //Field KEY:Ljava/lang/String;
44: return
반면
private static final String ZIP_PASSW="secret"
반환
Constant pool:
const #8 = String #9; // secret
내가 전화하지 않았다 유의하시기 바랍니다 상수 PASSWORD
r ZIP_PASSW
(문자열이 공용 인 경우 중요 함).
ProGuard과 같은 난독 화 도구를 사용할 수도 있습니다.
나는 그 좋은 질문을하고 어떤 경우에는 비동기 적 암호 (모든 사람이 그 전문 용어로 소리내어 말하기 때문에)가 그 문제에 도움이되지 않을 것이라고 생각한다. 예 : 사용자 지정 암호를 일반 텍스트로 검색 할 수 있어야하지만 db의 일반 텍스트로 저장하지 않으려는 응용 프로그램 데이터베이스에 저장하려는 경우. 따라서 애플리케이션이 암호화하고 해독 할 수 있어야합니다 => 제공해야 할 키와 동일한 문제 (비동기 암호화를위한 두 개의 키)가 있습니다. 아무리 당신이 싱크로네이즈를 AES로 사용하든 그렇지 않든간에. – tObi