对CERT.RSA进行详细解析

 
注: App解析得到的文件时十六进制显示的,而Java解析得到的结果却是十进制显示的。
 
附件中CERT.RSA是签名后的apk包解压在META-INF目录下签名文件
 
获取公钥可以使用java工程代码实现,见附件(Test.java)实现代码如下:
 
package ceshi;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.PublicKey;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.security.spec.X509EncodedKeySpec;
 
import sun.misc.BASE64Encoder;
import sun.security.pkcs.PKCS7;
 
 
public class Test {
 
public static void main(String[] args) throws CertificateException,
IOException {
 
PublicKey pk;
FileInputStream fis = new FileInputStream("E:/CERT.RSA");
PKCS7 pkcs7 = new PKCS7(fis);
X509Certificate publicKey = pkcs7.getCertificates()[0];
pk = publicKey.getPublicKey();
 
BASE64Encoder bse = new BASE64Encoder();
System.out.println("pk:" + bse.encode(pk.getEncoded()));
 
byte[] ecode = pk.getEncoded();
System.out.println("issuer1:" + publicKey.getIssuerDN());
System.out.println("subject2:" + publicKey.getSubjectDN());
System.out.println(publicKey.getPublicKey());
 
StringBuilder hexString = new StringBuilder();
for (int i = 0; i < ecode.length; i++) {
if ((ecode[i] & 0xff) < 0x10) {// 0~F前面不零
hexString.append("0");
}
hexString.append(Integer.toHexString(0xFF & ecode[i]));
hexString.append(":");
}
 
System.out.println(hexString.toString());
 
输出的结果:
 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg3MUZxiXd+88iR8l95/SSr1lDISB3QWa
zypMKzgD7mPF4NHaVeOo6bgjsWk5YPy0mp+WfAH3NHIwltHCnqwOLb1JAdhJFk8QVcnda5i3js+K
76ZaIyxYibKkW6HHOMUDLaiA6Q65TCpLWQWjAofXZ79jjAoKSWcUOmVyvxJoXUCRt3cjD44K4iaR
1D3so4QTCmwV0LSUd/eqztnuVyO/h+YavLz4CYrbNezfWX9qhQS7D8HDuKc2AVX87tHMdEO92XGq
qydGR8XsaWV/fdQW3AqEh0s2LYiP5sQssU0339kD8AMhAIOrRFTR+QPQK7y+PKVTpQ63+ZYocVKZ
b193iQIDAQAB
issuer1:OU=hengbao
subject2:OU=hengbao
Sun RSA public key, 2048 bits
  modulus: 16593965864720895347096434199492838173371792286694613986873147773534355257208465003725167605143928942119164172396315316414706451899739004077145074314922253452766715261486558090967339242546324731392434573627827874949059378931716791574127022949320063683355579876895800702247260749515558149736409900183412762117231397532151334490980004096672565724638612858088772776008860162173946450836266510994531532667269288112245822936219200531988158667119337184317889244667597229190157140295298800606336441116787571541040036467536969259272887118029370150852090534562510684935539403389718093619240221037937029257859189546238112397193
  public exponent: 65537
30:82:01:22:30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:83:73:14:67:18:97:77:ef:3c:89:1f:25:f7:9f:d2:4a:bd:65:0c:84:81:dd:05:9a:cf:2a:4c:2b:38:03:ee:63:c5:e0:d1:da:55:e3:a8:e9:b8:23:b1:69:39:60:fc:b4:9a:9f:96:7c:01:f7:34:72:30:96:d1:c2:9e:ac:0e:2d:bd:49:01:d8:49:16:4f:10:55:c9:dd:6b:98:b7:8e:cf:8a:ef:a6:5a:23:2c:58:89:b2:a4:5b:a1:c7:38:c5:03:2d:a8:80:e9:0e:b9:4c:2a:4b:59:05:a3:02:87:d7:67:bf:63:8c:0a:0a:49:67:14:3a:65:72:bf:12:68:5d:40:91:b7:77:23:0f:8e:0a:e2:26:91:d4:3d:ec:a3:84:13:0a:6c:15:d0:b4:94:77:f7:aa:ce:d9:ee:57:23:bf:87:e6:1a:bc:bc:f8:09:8a:db:35:ec:df:59:7f:6a:85:04:bb:0f:c1:c3:b8:a7:36:01:55:fc:ee:d1:cc:74:43:bd:d9:71:aa:ab:27:46:47:c5:ec:69:65:7f:7d:d4:16:dc:0a:84:87:4b:36:2d:88:8f:e6:c4:2c:b1:4d:37:df:d9:03:f0:03:21:00:83:ab:44:54:d1:f9:03:d0:2b:bc:be:3c:a5:53:a5:0e:b7:f9:96:28:71:52:99:6f:5f:77:89:02:03:01:00:01:
 
 
ASN.1编码的十六进制描述:  


30:82:01:22:   //290个字节


30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:05:


00:03:82:01:0f:


00:30:82:01:0a: //266个字节


02:82:01:01:
//Modulus (2048 bit)   128位便是rsa公钥的N值
00:83:73:14:67:18:97:77:ef:3c:89:1f:25:f7:9f:
d2:4a:bd:65:0c:84:81:dd:05:9a:cf:2a:4c:2b:38:
03:ee:63:c5:e0:d1:da:55:e3:a8:e9:b8:23:b1:69:
39:60:fc:b4:9a:9f:96:7c:01:f7:34:72:30:96:d1:
c2:9e:ac:0e:2d:bd:49:01:d8:49:16:4f:10:55:c9:
dd:6b:98:b7:8e:cf:8a:ef:a6:5a:23:2c:58:89:b2:
a4:5b:a1:c7:38:c5:03:2d:a8:80:e9:0e:b9:4c:2a:
4b:59:05:a3:02:87:d7:67:bf:63:8c:0a:0a:49:67:
14:3a:65:72:bf:12:68:5d:40:91:b7:77:23:0f:8e:
0a:e2:26:91:d4:3d:ec:a3:84:13:0a:6c:15:d0:b4:
94:77:f7:aa:ce:d9:ee:57:23:bf:87:e6:1a:bc:bc:
f8:09:8a:db:35:ec:df:59:7f:6a:85:04:bb:0f:c1:
c3:b8:a7:36:01:55:fc:ee:d1:cc:74:43:bd:d9:71:
aa:ab:27:46:47:c5:ec:69:65:7f:7d:d4:16:dc:0a:
84:87:4b:36:2d:88:8f:e6:c4:2c:b1:4d:37:df:d9:
03:f0:03:21:00:83:ab:44:54:d1:f9:03:d0:2b:bc:
be:3c:a5:53:a5:0e:b7:f9:96:28:71:52:99:6f:5f:
77:89:


02:03:


 01:00:01  rsa公钥的E值   Exponent: 65537 (0x10001)
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值