본문 바로가기
프로그래밍/Android

카카오맵 API 사용을 위한 해시키 값 구하기

by Youngs_ 2021. 7. 24.

코드 사용보다는  cmd 창에서 명령어로 구하는것이 더 간편하다

디버그 해시키 값 구하기

keytool -exportcert -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64

 

릴리즈 해시키 값 구하기

keytool -exportcert -alias [YOUR_KEY_ALIAS] -keystore [YOUR_KEYSTORE_PATH] | openssl sha1 -binary | openssl base64

 

해시키값을 구하는 코드 

public static String checkApp(Context context) {
        /*
        	무결성 체크, 실행되어있는 모드가 디버그모드면 디버그 해시키값, 릴리즈모드면 릴리즈 해시키값을 반환한다.
        */
        try {
            @SuppressLint("PackageManagerGetSignatures")
            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);

            Signature signature = packageInfo.signatures[0];
            final String currentSignature = obtainSignatureString(signature);
            return currentSignature;
        } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
}
    
private static String obtainSignatureString(Signature signature) throws NoSuchAlgorithmException {
    byte[] certBytes = signature.toByteArray();
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    byte[] digest = md.digest(certBytes);

    // 16진수 변환 (예: A1:B2:C3... 형식)
    StringBuilder hexString = new StringBuilder();
    for (int i = 0; i < digest.length; i++) {
        if (i > 0) hexString.append(":");
        hexString.append(String.format("%02X", digest[i] & 0xFF));
    }
    return hexString.toString();
}

 


 

openssl을 사용하여 해시키 값을 구하면 이상한 해시키 값을 가져올 수 있다고해서 코틀린 코드를 이용해 찾았더니 

E/MapViewLocationManager 에러가 나오지않았다.

import android.content.pm.PackageManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Base64
import android.util.Base64.encodeToString
import android.util.Log
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import net.daum.mf.map.api.MapView
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            getHashKey()
        }

        val mapView = MapView(this)

        val mapViewContainer = findViewById(R.id.map_view) as ViewGroup

        mapViewContainer.addView(mapView)
    }

    private fun getHashKey() {
        var packageInfo: PackageInfo? = null
        try {
            packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }
        if (packageInfo == null) Log.e("KeyHash", "KeyHash:null")
        for (signature in packageInfo!!.signatures) {
            try {
                val md = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())
                Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT))
            } catch (e: NoSuchAlgorithmException) {
                Log.e("KeyHash", "Unable to get MessageDigest. signature=$signature", e)
            }
        }
    }
}

 

혹은 해당 프로젝트 폴더의 cmd창으로 이동해서 아래 명령어를 입력한다.

openssl이 설치되어있어야한다.

keytool -exportcert -alias androiddebugkey -keystore "%USERPROFILE%\.android\debug.keystore" -storepass android -keypass android | openssl sha1 -binary | openssl base64

 


출처 : https://snaildeveloper.tistory.com/11

 

[Kakao Api] 키 해시 생성 및 플랫폼 등록

윈도우 기준으로 작성 된 방법이므로, Mac 등 다른 운영체제의 방법과는 상이할 수 있습니다. 1. Kakao Developer에 애플리케이션 추가 https://developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양

snaildeveloper.tistory.com

 

댓글