7

로고 이미지 파일 이름, 데이터베이스 이름, 데이터베이스 사용자 및 데이터베이스 암호와 같은 내 응용 프로그램의 모든 정보를 저장하는 Java의 속성 파일이 있습니다.
속성 파일에 암호화 된 암호를 저장할 수 있습니다.
그러나 키 또는 암호는 디 컴파일러를 사용하여 jar에서 읽을 수 있습니다.
db 패스를 속성 파일에 안전하게 저장하는 방법이 있습니까?임베디드 암호를 보호

답변

3

여러 가지 방법으로 관리 할 수 ​​있습니다. 응용 프로그램이 시작될 때 사용자가 키 스토어에 대한 암호를 제공하게하는 방법을 이해할 수 있다면 키를 사용하여 모든 값을 암호화하고이 키를 키 스토어에 저장하는 것이 가장 적절합니다. 키 스토어에 대한 명령 행 인터페이스는 keytool을 사용하는 것입니다. 그러나 JSE에는 프로그래밍 방식으로 키 스토어에 액세스하는 API도 있습니다.

시작할 때 키 저장소에 암호를 수동으로 제공하지 못하는 경우 (웹 응용 프로그램과 같이) 키를 난독 화시킬 수있는 매우 복잡한 난독 화 루틴을 작성하는 한 가지 방법이 있습니다 속성 파일에도 저장하십시오. 기억해야 할 중요한 사항은 난독 화 및 난독 화 논리가 다중 계층 (스크램블링, 인코딩, 가짜 문자의 도입 등을 수반 할 수 있음)이어야하며 응용 프로그램의 다른 클래스에서 숨길 수있는 하나 이상의 키가 있어야한다는 것입니다 비 직관적 인 이름을 사용합니다. 이것은 디 컴파일러와 상당한 시간과 지능을 가진 사람이 여전히 그 문제를 해결할 수 있기 때문에 완전히 안전한 메커니즘은 아니지만 네이티브 (예 : 비 호환 용이하지 않은) 코드로 침입 할 것을 요구하지 않는 유일한 사람입니다 .

1

아니요. 암호화하더라도 누군가 암호 해독 코드를 디 컴파일하면됩니다.

+0

누군가에게 열쇠와 자물쇠를 제공하면 열쇠를 복제하고 열쇠를주지 않고 자물쇠에 액세스 할 수 있습니다. 열쇠를 제공하지 않는 한 열쇠를 얻을 수 없습니다. 이는 DRM의 근본적인 결함이기도합니다. –

0

암호 (DB 암호 또는 키 암호)에 대해 별도의 특성 파일 (jar 외부)을 작성하고 해당 특성 파일을 분배에 포함시키지 않을 수 있습니다. 또는 서버가 스푸핑이 필요할 수 있도록 특정 컴퓨터의 로그인 만 수락하도록 만들 수도 있습니다.

2

암호의 SHA1 해시를 속성 파일에 저장합니다. 그런 다음 사용자 암호의 유효성을 검사 할 때 로그인 시도를 해시하고 두 해시가 일치하는지 확인하십시오.

이것은 몇 바이트를 해시 할 코드입니다. getBytes() 메서드를 사용하면 String에서 바이트를 쉽게 찾을 수 있습니다. 설명 된대로 암호를 암호화하는 것 외에도

/** 
    * Returns the hash value of the given chars 
    * 
    * Uses the default hash algorithm described above 
    * 
    * @param in 
    *   the byte[] to hash 
    * @return a byte[] of hashed values 
    */ 
    public static byte[] getHashedBytes(byte[] in) 
    { 
     MessageDigest msg; 
     try 
     { 
      msg = MessageDigest.getInstance(hashingAlgorithmUsed); 
     } 
     catch (NoSuchAlgorithmException e) 
     { 
      throw new AssertionError("Someone chose to use a hashing algorithm that doesn't exist. Epic fail, go change it in the Util file. SHA(1) or MD5"); 
     } 
     msg.update(in); 
     return msg.digest(); 
    } 
+0

좋은 답변이지만 질문에는 만족하지 않습니다. –

+0

나는 질문을 완전히 이해하지 못한다고 생각한다. – jjnguy

+2

그는 응용 프로그램이 데이터베이스에 연결하는 데 사용할 사용자 이름과 암호를 저장하려고합니다.그래서 그는 데이터베이스에 연결하기 전에이를 다시 일반 텍스트로 변환 할 수 있어야합니다. –

0

위의 개별 특성에 어떤 암호가 가장 잠긴 권한 가능한이 파일을 제공하려고 파일 및 배포를 입었다.

예를 들어, Application Server가 Linux/Unix에서 root으로 실행되는 경우 root이 소유 한 암호 등록 정보 파일을 400/-r-------- 권한으로 만드십시오.

0

물론 앱이 https를 통해 서버에 접속하여 비밀번호를 다운로드하지 못했습니까?