Android에서 Hashkey값을 추출하는 방법

2023. 3. 25. 18:11Mobile/Android

작성자알 수 없는 사용자

728x90
반응형

안녕하세요. 기깔나는 사람들에서 안드로이드를 맡고 있는 마플입니다.

 

안드로이드앱에서 외부 open API를 사용하기 위해서는 Hashkey이 필요한데요. 

 

 기존에 안드로이드에서 Heshkey값은 'PakageManager.GET_SIGNATURES'을 통해 추출을 했지만, 안드로이드 API level 31부터는 보안상 이유로  'PakageManager.GET_SIGNATURES'을 사용을 지양하고 있어요. 따라서 해당 값을 바꿔줘야 해요.


 API level 31에서 지향하는 방식은 'PakageManager.GET_SIGNATURES'대신 'PackageManager.GET_SIGNING_CERTIFICATES'을 사용하는 것에요.

 해당 방식에 따라 밑의 소스코드를 작성해보았고, 실행하여 Hasheky값을 추출해 보았어요.

 HashKey값은 Logcat에서 필터링 기능을 통해 볼 수가 있어요!!

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;

import android.util.Base64;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public void getKeyHash() {
        try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNING_CERTIFICATES);
            android.content.pm.Signature[] signatures = packageInfo.signingInfo.getApkContentsSigners();

            for (Signature signature : signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hashKey = Base64.encodeToString(md.digest(), Base64.DEFAULT);

                // hashKey 값 로그 출력
                Log.d("HASH_KEY", hashKey);
            }
        } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

이렇게 해서 안드로이드의 API level가 31이상인 앱에서 Hashkey값을 추출해 보았어요.

 

안드로이드 API가 새로운 버전이 나올 때마다 변경사항이 많으니, 어떤 점이 달라 졌는지 항상 공부하는 자세로 도전해봐요!!!

 

728x90
반응형