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

조회수 3265회

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;

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)