본문 바로가기
안드로이드 자바

[JAVA][Android]앱의 Key Hash 값 가져오기

by teamnova 2024. 7. 6.
728x90

오늘은 앱의 Key Hash 값을 가져오는 예시를 작성해 보겠습니다.

 

 

 

 

 

레이아웃 xml 파일 코드(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textViewHashKey"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="key hash가 띄워질 자리입니다"
        android:textSize="18sp"
        android:padding="16dp"/>

    <Button
        android:id="@+id/buttonGetHashKey"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="key hash 가져오기"
        android:padding="16dp"/>
</LinearLayout>

 

 

 

 

액티비티 자바 코드

public class MainActivity extends AppCompatActivity {

    private TextView textViewHashKey;
    private Button buttonGetHashKey;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textViewHashKey = findViewById(R.id.textViewHashKey); //key hash 가 보여질 TextView
        buttonGetHashKey = findViewById(R.id.buttonGetHashKey); //key hash 값을 가져올 이벤트를 발생시킬 Button

        buttonGetHashKey.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String hashKey = getHashKey();
                if (hashKey != null) {
                    //key hash를 가져온 경우 텍스트 뷰에 문자열 입력
                    textViewHashKey.setText(hashKey);
                } else {
                    //key hash를 가져오는데 실패한 경우 실패 문자열 입력
                    textViewHashKey.setText("key hash 값 가져오기 실패");
                }
            }
        });
    }


    //key hash 계산 메서드
    private String getHashKey() {
        try {
            // 현재 패키지의 서명 정보 가져오기
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            if (packageInfo == null) {
                return null;
            }

            // 패키지 정보에서 서명 배열을 반복하여 해시 계산
            for (Signature signature : packageInfo.signatures) {
                try {
                    // SHA 알고리즘을 사용하여 서명의 해시 계산
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    // 계산된 해시를 Base64로 인코딩하여 반환
                    return Base64.encodeToString(md.digest(), Base64.DEFAULT);
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}