【问题标题】:Get public key hash from cer certificate in Android从 Android 中的 cer 证书获取公钥哈希
【发布时间】:2021-02-14 23:27:13
【问题描述】:

我的原始文件夹中存储了一个 cer 证书。我需要从中提取公钥哈希。

我在终端中尝试过,它使用以下命令给出了正确的公钥哈希。

Terminal command: openssl x509 -inform DER -in certificate.cer -pubkey -noout > pubkey.pem

以上命令以我需要的格式为我提供了正确的公钥哈希,

Eg output: beAmI30qZXmIu44J8J1KYe0Uzoqq1ZF699W8HnP0ZZk=

根据我的要求,我尝试使用以下代码从原始文件夹中的证书中提取此密钥,

fun getCertificate(): InputStream {
    val inputStream = App.applicationContext().resources.openRawResource(
        App.applicationContext().resources.getIdentifier(
            "certificate",
            "raw", App.applicationContext().packageName
        )
    )
    return inputStream
}

fun getPublicKey(): String {
    val f: CertificateFactory = CertificateFactory.getInstance("X.509")
    val certificate: X509Certificate =
        f.generateCertificate(getCertificate()) as X509Certificate
    val pk: PublicKey = certificate.getPublicKey()

    val publicKeyString = Base64.encodeToString(pk.encoded, Base64.DEFAULT)

    Log.d(TAG, "PublicKey: $publicKeyString")

    return publicKeyString
}

logcat 中的输出:

PublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyMl/U/9qHgD5PaL1UlVKAiVCmT73B/Fs
fnfoUhl12/ko2w+a5MKEQJnMlqO2yhl6M0p+ZBn/8mBcw0QxjHbn5qW2aZ5wXzFfkgTxV+bBBYdu
eDKuEU18FFoUvasdasdasdsadasdadadadsdadsdsadwDgdtzQYm7CUtPzgO4HvqZX7LBv1BaIgI
j8OMW1sCkhk0ZYNQzGRcxlu2Q5vjPU4hUpw25YWAE4NotoTOAxcg8DgjnSvsFp2hUZemxbd2bBSB
fgDlla4oopsCsZ3RRb4qHHJGShdskajdgskajdaskdjahslkjrB1YBWGzlvCw93Z0ayA
EWUdWwIDAQAB

如您所见,我收到的公钥哈希与我需要的不同。如何在 openssl 中实现与终端命令相同的功能?

注意 1:我已更改公钥文本以避免暴露密钥,但模式相似。

注意 2:Kotlin 或 Java 都接受了我只需要正确的 api/方法

【问题讨论】:

  • 我没有看到您在 Kotlin 代码中生成哈希的位置,而是打印了未哈希的完整公钥。

标签: java android kotlin openssl public-key


【解决方案1】:

正如@Robert 在评论部分指出的那样,我没有散列我的输出。我用散列方法解决了它。不错的收获:)

在此处发布答案,以便其他人可以使用此问题和答案从 cer 获取哈希键。

fun calculateSH256(secret: ByteArray): String {
    val sha256hex = Hashing.sha256().hashBytes(secret).asBytes()
    return Base64.encodeToString(sha256hex, Base64.DEFAULT)
}

【讨论】:

    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多