【发布时间】: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