안드로이드 해시키 얻기에 대한 질문


PackageInfo info = ctx.getPackageManager().getPackageInfo(getAppPackageName(ctx), PackageManager.GET_SIGNATURES);

위의 명령문이 의미하는것이 앱의 고유한 사인값을 가져오는것 아닌가요?

제가 이해한게 잘못된건가요?

가져온 사인값으로 md암호화해서 aes의 비밀키로 사용할 요량이었는데...

어째 프로젝트에 저 함수만 있으면 모두 같은 결과값을 반환해서...멘붕이네요;;

암호화 하는부분은 이해를 했는데 위의 두줄이 제가 이해를 잘못하고 있는것 같아 여쭤봅니다요.

고수님들~ 답변 주시면 감사하겠습니다.

아래는 어느분이 만들어놓은 해시키 가져오기 함수의 전문입니다.

/**

  • 해시키 가져오기

*/

public static String getPackageHashKey(Context ctx) {

try {

PackageInfo info = ctx.getPackageManager().getPackageInfo(getAppPackageName(ctx), PackageManager.GET_SIGNATURES);

for (Signature signature : info.signatures) {

MessageDigest md = MessageDigest.getInstance("SHA");

md.update(signature.toByteArray());

return Base64.encodeToString(md.digest(), Base64.DEFAULT);

}

} catch (PackageManager.NameNotFoundException ex) {

ex.printStackTrace();

} catch (NoSuchAlgorithmException ex) {

ex.printStackTrace();

} catch (Exception ex) {

ex.printStackTrace();

}

return null;

}

  • 2016년 11월 08일에 작성됨

조회수 77


1 답변


좋아요
0
싫어요
채택취소하기

개념은 제대로 이해한 게 맞습니다. 다만 모두 같은 값을 반환해서 멘붕이라고 하셨는데요. 이 부분은 그럴 수도 있습니다. 만일 A APK, B APK에서 같은 값이 나온다면 두 프로젝트는 같은 키로 서명을 한 것입니다.

특별한 설정을 하지 않았다면 IDE가 생성한 디버그 키로 서명을 하기 때문에 같은 결과가 나옵니다. 따라서 디버그 모드로 빌드한 것은 아닌지 확인해 볼 필요가 있고요. 릴리즈 빌드에서도 같은 릴리즈 키로 서명을 했다면 올려주신 코드의 getPackageHashKey() 함수는 같은 값을 반환하게 됩니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close