Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在我的应用程序中锁定公钥_Android_Public_Pinning - Fatal编程技术网

Android 在我的应用程序中锁定公钥

Android 在我的应用程序中锁定公钥,android,public,pinning,Android,Public,Pinning,作为安全措施的一部分,我将公钥固定在我的应用程序中,因为我已经从我的PEM证书中提取了公钥 -----BEGIN PUBLIC KEY----- MIIBIj....IDAQAB -----END PUBLIC KEY----- 然而,在OWASP的示例代码中,我们确实看到了比较DER编码公钥的代码 // DER encoded public key private static String PUB_KEY = "30820122300d06092a864886f70d0101" + "01

作为安全措施的一部分,我将公钥固定在我的应用程序中,因为我已经从我的PEM证书中提取了公钥

-----BEGIN PUBLIC KEY-----
MIIBIj....IDAQAB
-----END PUBLIC KEY-----
然而,在OWASP的示例代码中,我们确实看到了比较DER编码公钥的代码

// DER encoded public key
private static String PUB_KEY = "30820122300d06092a864886f70d0101"
+ "0105000382010f003082010a0282010100b35ea8adaf4cb6db86068a836f3c85"
+ "5a545b1f0cc8afb19e38213bac4d55c3f2f19df6dee82ead67f70a990131b6bc"
+ "ac1a9116acc883862f00593199df19ce027c8eaaae8e3121f7f329219464e657"
+ "2cbf66e8e229eac2992dd795c4f23df0fe72b6ceef457eba0b9029619e0395b8"
+ "609851849dd6214589a2ceba4f7a7dcceb7ab2a6b60c27c69317bd7ab2135f50"
+ "c6317e5dbfb9d1e55936e4109b7b911450c746fe0d5d07165b6b23ada7700b00"
+ "33238c858ad179a82459c4718019c111b4ef7be53e5972e06ca68a112406da38"
+ "cf60d2f4fda4d1cd52f1da9fd6104d91a34455cd7b328b02525320a35253147b"
+ "e0b7a5bc860966dc84f10d723ce7eed5430203010001";
我知道DER是一种二进制格式,但不确定作者如何转换或提取上述格式?当我转换成DER时,它具有与上述格式不同的原始字节。 有人知道这件事吗

另一种方法可以是, 示例代码

//Hack ahead: BigInteger and toString(). We know a DER encoded Public Key begins
//with 0x30 (ASN.1 SEQUENCE and CONSTRUCTED), so there is no leading 0x00 to drop.
RSAPublicKey pubkey = (RSAPublicKey) chain[0].getPublicKey();
String enc

oded = new BigInteger(1 /* positive */, pubkey.getEncoded()).toString(16);
如果我转换“编码”变量base64 PEM公钥格式。如何在Android中实现这一点


如果您有任何帮助,我们将不胜感激。

下面一行解决了我的问题:

String base64Encoded = Base64.encodeToString(pubkey.getEncoded(), Base64.DEFAULT).
    replaceAll("\n", "");

嘿,托尼,我正在尝试在SSL握手时读取服务器的公钥。你们提到的代码说明了如何从静态PEM文件中读取公钥(若我捆绑在应用程序中)。在SSL握手时,我有X509Certificate实例,我想将其转换为PEM public key base 64格式,或者我的应用程序中有PEM base64 public key,并想将其转换为ASN1 DER编码。如果您只是尝试将固定作为一种安全措施来实现,那么实现方法就是使用自定义TrustManager-有很多Stackoverflow上已经有关于此的问题(例如)。如果您确实需要读取服务器证书,那么,第一个链接将解释如何验证SSL证书是否可信。如果服务器拥有任何CA签名证书,则此代码将正常工作。第二个链接,是的,这是我想做的,但正如OWSP链接所解释的。不包括完整的PEM证书并添加到truststore。如果你读了我的问题,我问了两种方法的帮助,但这两个链接没有帮助。顺便说一句-我对堆栈流做了足够的研究,然后提出了这个问题,我确实看到了很多相关的线程,但没有满足我的要求。@Pankaj我也有同样的要求,我获取了我的公钥,看起来像00 01 10 00 00 00 00 00 E0 I0 00 00 00 00 00 00 00 00,因此请让我知道我应该为进一步的过程做些什么。我指的是服务器通信。请引导我。谢谢你的解决方案。我整天都在谷歌上寻找如何正确解码,这节省了我的时间。例如,我修改了找到的原始应用程序并将其上载到github。你可以在这里找到:这需要更多的选票。如果你使用任何安卓5.x设备,它都是必需的。RSA检查代码还应检查authType字符串是否包含“RSA”,而不是它是否等于它。。。