2016-09-01 3 views
1

동일한 웹 서비스를 사용하는 일부 앱이 있으며 어떤 앱이 웹 서비스를 호출하는지 고유하게 식별하는 방법이 필요합니다.APK 해시 서명이 변경됩니까?

내가 끝낸 것은 다른 매개 변수와 함께 앱의 해시 서명을 보내는 것입니다. 서명을 얻는 코드는 https://stackoverflow.com/a/25524657/17648과 비슷합니다.

그런 다음 나중에 웹 서비스 호출과 비교하여 어떤 메소드를 호출했는지 확인하는 데 사용할 수있는 모든 해시가 저장된 테이블이 있습니다.

이렇게하면 웹 서비스를 호출 할 때 switch 문을 작성할 필요가 없습니다.

이것은 현재 정상적으로 작동하고 있지만 해시 서명이 APK의 모든 버전에서 동일하며 설치된 모든 휴대 전화/태블릿에서도 동일하게 유지됩니다.

답변

1

그 대답의 코드는 사실 키 스토어의 공개 키를 해싱합니다. 실제로는 signatures 필드에 있습니다. SHA-256 해시 알고리즘을 사용하면 Java 7 +의 keytool 명령을 통해 키 스토어의 해시를 덤프하는 것과 동일한 값을 얻게됩니다.

이 두 가지 잠재적 인 문제로 연결 :

  1. 당신은 동일한 서명 키 저장소로 서명 된 모든 응용 프로그램에 대해 동일한 값을 얻어야한다. 앱을 구분하려면 서로 다른 서명 키 스토어를 사용해야합니다. 어쨌든 그렇게 할 수도 있습니다.

  2. Signaturebyte[]의 정확한 형식은 기술적으로 문서화되어 있지 않습니다. 앞으로있을 일을 바꿀 수도 있습니다. 따라서 언젠가는 버전 종속 논리가 필요할 수도 있습니다.

IMHO, 당신의 알고리즘은 크게 다만, getPackageName()를 사용하여 응용 프로그램 ID를 사용하는 것보다 좋은 것은 아닙니다.

+0

예, 각 앱마다 고유 한 키 저장소가 있습니다. 팁 btw 주셔서 감사! – user3900456

관련 문제