You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java代码获取GitHub App私钥PEM文件的指纹?

从GitHub App的PEM私钥文件获取SHA256指纹(Java实现)

GitHub App生成的私钥指纹,本质是该私钥对应公钥的SHA256哈希值,经过Base64编码后加上SHA256:前缀。以下是用Java代码获取该指纹的具体实现:

依赖准备

GitHub生成的私钥是PKCS#8格式的PEM文件,JDK默认API解析起来比较繁琐,推荐使用BouncyCastle库简化操作。如果用Maven管理项目,添加以下依赖:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.70</version>
</dependency>

代码实现

import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;

import java.io.FileReader;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.security.MessageDigest;
import java.util.Base64;

public class GitHubKeyFingerprint {
    public static void main(String[] args) throws Exception {
        // 替换为本地PEM私钥文件的实际路径
        String pemFilePath = "/your/local/path/github-app-key.pem";

        try (PEMParser pemParser = new PEMParser(new FileReader(pemFilePath))) {
            // 解析PEM文件得到私钥信息
            PrivateKeyInfo keyInfo = (PrivateKeyInfo) pemParser.readObject();
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
            PrivateKey privateKey = converter.getPrivateKey(keyInfo);

            // 从私钥中提取对应公钥
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPublicKeySpec publicKeySpec = keyFactory.getKeySpec(privateKey, RSAPublicKeySpec.class);
            PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);

            // 计算公钥的SHA256哈希
            MessageDigest sha256Digest = MessageDigest.getInstance("SHA-256");
            byte[] hashBytes = sha256Digest.digest(publicKey.getEncoded());

            // 生成与GitHub UI一致的指纹格式
            String base64Hash = Base64.getEncoder().encodeToString(hashBytes);
            String fingerprint = "SHA256:" + base64Hash;

            System.out.println("匹配GitHub的指纹: " + fingerprint);
        }
    }
}

关键逻辑说明

  • 解析PEM文件:通过BouncyCastle的PEMParser直接读取并解析PKCS#8格式的PEM私钥,无需手动处理文件头部、尾部的标识行。
  • 提取公钥:GitHub显示的指纹基于私钥对应的公钥生成,因此需要从私钥中推导公钥。
  • 生成指纹:对公钥的DER编码字节计算SHA256哈希,再进行Base64编码,最后拼接SHA256:前缀,即可得到与GitHub UI完全一致的指纹字符串。

内容的提问来源于stack exchange,提问作者kolobok_ua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:27:30