문제

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

도움이 되었습니까?

해결책

이를 관리하는 방법에는 여러 가지가 있습니다.애플리케이션이 시작될 때 사용자가 키 저장소에 대한 비밀번호를 제공하도록 하는 방법을 알아낼 수 있다면 가장 적절한 방법은 키를 사용하여 모든 값을 암호화하고 이 키를 키 저장소에 저장하는 것입니다.키 저장소에 대한 명령줄 인터페이스는 keytool을 사용합니다.그러나 JSE에는 프로그래밍 방식으로 키 저장소에 액세스할 수 있는 API도 있습니다.

사용자가 시작 시 키 저장소에 수동으로 비밀번호를 제공하도록 할 수 없는 경우(예: 웹 애플리케이션의 경우) 이를 수행하는 한 가지 방법은 키를 난독화하여 저장할 수 있는 매우 복잡한 난독화 루틴을 작성하는 것입니다. 속성 파일도 마찬가지입니다.기억해야 할 중요한 점은 난독화 및 난독화 논리가 다중 계층이어야 한다는 것입니다(스크램블링, 인코딩, 가짜 문자 도입 등이 포함될 수 있음).등) 직관적이지 않은 이름을 사용하여 애플리케이션의 다른 클래스에 숨겨질 수 있는 키가 하나 이상 있어야 합니다.디컴파일러와 상당한 시간과 지능을 갖춘 사람이 여전히 이 문제를 해결할 수 있기 때문에 이것은 완전히 안전한 메커니즘은 아니지만 내가 아는 유일한 메커니즘은 네이티브(예:쉽게 디컴파일할 수 없는) 코드입니다.

다른 팁

속성 파일에 비밀번호의 SHA1 해시를 저장합니다.그런 다음 사용자 비밀번호를 확인할 때 로그인 시도를 해시하고 두 해시가 일치하는지 확인합니다.

이것은 일부 바이트를 해시하는 코드입니다.다음을 사용하여 문자열에서 쉽게 바이트를 가져올 수 있습니다. getBytes() 방법.

/**
     * 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();
    }

아니 없어.암호화하더라도 누군가는 이를 해독하는 코드를 디컴파일할 것입니다.

비밀번호(직접 DB 비밀번호 또는 키 비밀번호 문구)에 대해 별도의 속성 파일(jar 외부)을 만들고 해당 속성 파일을 배포에 포함하지 않을 수 있습니다.또는 스푸핑이 필요하도록 서버가 특정 시스템의 로그인만 허용하도록 할 수도 있습니다.

위에서 설명한 대로 비밀번호를 암호화하는 것 외에도 별도의 속성 파일에 비밀번호를 입력하고 배포 시 이 파일에 가능한 가장 잠긴 권한을 부여하십시오.

예를 들어, 애플리케이션 서버가 Linux/Unix에서 다음과 같이 실행되는 경우 root 그런 다음 비밀번호 속성 파일을 다음 소유로 만듭니다. root 400으로/-r-------- 권한.

물론 어떤 방식으로든 인증한 후 앱이 https를 통해 서버에 접속하고 비밀번호를 다운로드하도록 할 수는 없나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top