gpt4 book ai didi

java - 来自硬编码 X.509 证书的 KeyFactory.generatePublic

转载 作者:搜寻专家 更新时间:2023-11-01 09:07:37 25 4
gpt4 key购买 nike

我需要将我的应用划分为应用和扩展。所以我为 Google Play 下载程序库 (android-sdk\extras\google\play_apk_expansion\downloader_sample) 举了一个例子。项目构建良好,但在

byte[] decodedKey = Base64.decode(encodedPublicKey);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM); // "RSA"
return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));<code>

,在字符串 keyFactory.generatePublic 上。它来自 src\com\google\android\vending\licensing\LicenseChecker.java(android-sdk\extras\google\play_licensing\library\src)错误:

E/AndroidRuntime(523): java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.IllegalArgumentException: Bad sequence size: 3

key 看起来像:

private static final String BASE64_PUBLIC_KEY =
"MIIB5TCCAU6gAwIBAgIET45f9zANBgkqhkiG9w0BAQUFADA3MQswCQYDVQQGEwJVUzEQMA4GA1UE" +
"ChMHQW5kcm9pZDEWMBQGA1UEAxMNQW5kcm9pZCBEZWJ1ZzAeFw0xMjA0MTgwNjMyMjNaFw00MjA0" +
"MTEwNjMyMjNaMDcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdBbmRyb2lkMRYwFAYDVQQDEw1BbmRy" +
"b2lkIERlYnVnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDh2IN5HhCp1X+gLaga06VXr/MZ" +
"JpkzhxMdg5yWyOkj50ZDCPywAh8LcNEih9XjYswAXwRHxZpUy9VFqgGcku33AAdHxyK7KK4ge7u5" +
"a7KY11CJhxMUbOGezGldMUTwBA0ZSuObfW402I4Y4ciAsMrOnhZqSTI/tTdAWv6cPTiJQQIDAQAB" +
"MA0GCSqGSIb3DQEBBQUAA4GBAAZ89R7OMtkQnGpE6s/crqUMysAXOaHktrr6mV/4VknoLHWJUsRg" +
"iv34rAFpd1SDg0HS8HklIymcwFkrewwx9MzryYtZEdBjvo2EeTz5u8nxQNz9sqChaya0oSXB/VI8" +
"nZBnoJ+n5Zbj7QfIgG7thrT4+n4pIDO83+E6zVW6RnIh";

如果我将 key 更改为随机字符串,我会得到:

E/AndroidRuntime(478): java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.ClassCastException: com.android.org.bouncycastle.asn1.DERApplicationSpecific cannot be cast to com.android.org.bouncycastle.asn1.ASN1Sequence

我尝试生成 key 规范,它没有导致错误,但这不是我需要的:

RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger("12345678", 16), new BigInteger("11", 16));
KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM);
return keyFactory.generatePublic(pubKeySpec);

我重新检查了证书的生成和导出。看起来是正确的。 key 对生成:

keytool.exe -genkey -keyalg "RSA" -keysize 2048 -v -keystore key2.store -storepass <storepwd> -keypass <keypwd>

, 导出

keytool.exe -export -rfc -storepass <storepwd> -keystore key2.store -file key222.cer

这是调试代码。我将在发布时使用来自 Google Play 的公钥。硬编码 x.509 证书并在应用中使用它的正确方法是什么?

最佳答案

这不是有效的编码公钥,它似乎是 Android 调试证书。请注意,公钥 != 证书,尽管证书确实包含公钥。另请注意,任何两个随机 BigInteger 都不构成有效的 key 对(至少它们必须是素数)。要解析实际证书,您需要这样的东西:

FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(bis);

你到底想做什么?

关于java - 来自硬编码 X.509 证书的 KeyFactory.generatePublic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com