Keystoreからキーハッシュを取得する方法


  1. キーアルゴリズムがRSAの場合のコード例:
import java.security.KeyFactory;
import java.security.KeyStore;
import java.security.PublicKey;
import java.security.cert.Certificate;
// キーストアからキーハッシュを取得するメソッド
public String getKeyHashFromKeystore(String keystorePath, String keystorePassword, String alias, String keyPassword) {
    try {
        KeyStore keystore = KeyStore.getInstance("JKS"); // キーストアのタイプに応じて変更
        keystore.load(new FileInputStream(keystorePath), keystorePassword.toCharArray());
        Certificate cert = keystore.getCertificate(alias);
        PublicKey publicKey = cert.getPublicKey();
        byte[] encodedPublicKey = publicKey.getEncoded();
        MessageDigest md = MessageDigest.getInstance("SHA");
        byte[] keyHash = md.digest(encodedPublicKey);
        StringBuilder sb = new StringBuilder();
        for (byte b : keyHash) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
  1. キーアルゴリズムがECDSAの場合のコード例:
import java.nio.charset.StandardCharsets;
import java.security.KeyStore;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.interfaces.ECPublicKey;
// キーストアからキーハッシュを取得するメソッド
public String getKeyHashFromKeystore(String keystorePath, String keystorePassword, String alias, String keyPassword) {
    try {
        KeyStore keystore = KeyStore.getInstance("PKCS12"); // キーストアのタイプに応じて変更
        keystore.load(new FileInputStream(keystorePath), keystorePassword.toCharArray());
        Certificate cert = keystore.getCertificate(alias);
        PublicKey publicKey = cert.getPublicKey();
        byte[] encodedPublicKey = publicKey.getEncoded();
        ECPublicKey ecPublicKey = (ECPublicKey) publicKey;
        byte[] x = ecPublicKey.getW().getAffineX().toByteArray();
        byte[] y = ecPublicKey.getW().getAffineY().toByteArray();
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(x);
        md.update(y);
        byte[] keyHash = md.digest();
        StringBuilder sb = new StringBuilder();
        for (byte b : keyHash) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

これらのコード例では、Keystoreからキーハッシュを取得するために、KeyStoreクラスと関連するクラスやメソッドを使用しています。キーストアのタイプに応じて、"JKS"や"PKCS12"といった適切なタイプを指定する必要があります。

以上の方法とコード例を使用することで、AndroidアプリケーションでKeystoreからキーハッシュを取得することができます。これにより、セキュリティ関連の機能やAPIの使用において、正しいキーハッシュを確認することができます。