`

署名认证相关知识

 
阅读更多

命令:

生成keystone(存放一组证书和私钥的地方)

keytool -genkey -alias(别名) hello -keyalg  RSA -validity 20000 -keystore hello.keystore

 

查看keystore 信息

keytool -list  -v -keystore hello.keystore -storepass 123456  

 

缺省情况下,-list 命令打印证书的 MD5 指纹。而如果指定了 -v 选项,将以可读格式打印证书,如果指定了 -rfc 选项,将以可打印的编码格式输出证书。

keytool -list  -rfc -keystore  hello.keystore -storepass 123456

 

证书的导出:

keytool -export -alias test -keystore  hello.keystore -file  test.crt -storepass 123456

 

证书的导入

keytool -import -alias rootcert -file root.crt  -keystore hello.keystore

 

证书条目的删除:

keytool -delete -alias ceatecert1 -keystore .keystore -storepass 123456

 

 

使用jdk的jarsigner工具对apk文件签名

 jarsigner -verbose -keystore hello.keystore TestApk.apk test

 

 

签名后可以使用如下命令验证是否签名成功: 

 jarsigner -verify to_sign.apk 

如果需要查看更详细的验证信息,可修改为:

 jarsigner -certs -verbose -verify to_sign.apk 

 

 

 

 

 

 

 

获取证书信息相关方法:

package com.nec.test;



import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.os.Bundle;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.util.Log;

public class TestApkActivity extends Activity {
    /** Called when the activity is first created. */
	private static final String FILENAME = "cacerts.bks";
	
	private static final String FILENAME_CERT = "ca.crt"; //test.crt \ ca.crt

	private List<PublicKey>  listKey = new ArrayList<PublicKey>();
	private File file;
	static final String IN_FILE_NAME = "c:\\Documents and Settings\\2172980000522\\TestApk.apk";
	static final String OUT_FILE_NAME = "c:\\Documents and Settings\\2172980000522\\TestApk.Zip";
	 private final static String PATH = "/sdcard/fcding.apk"; // TestApk.apk 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        readCacerts(FILENAME);
        try {
			readCert(FILENAME_CERT);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
        TestApkActivity activity  = new TestApkActivity();
        PackageInfo pi =  activity.parsePackage(PATH, PackageManager.GET_SIGNATURES);
        String issuerDN = null;  
		String subjectDN = null;  
		String publickey = null;  
        

		try {  
			byte[] signature = pi.signatures[0].toByteArray();  
			// String hash = md5(signature);  
			CertificateFactory certFactory =  
	        CertificateFactory.getInstance("X.509");  
			X509Certificate cert = (X509Certificate)  
			certFactory.generateCertificate(  
					new ByteArrayInputStream(signature));  

			issuerDN = cert.getIssuerDN().toString();  
			Log.d("TRACK", issuerDN);  
			subjectDN = cert.getSubjectDN().toString();  
			Log.d("TRACK", subjectDN);  
			publickey = cert.getPublicKey().toString();  
			Log.d("TRACK", publickey);  
		System.out.println("====================++++++++++++++++++++"+listKey.contains(cert.getPublicKey())	);
			
		} catch (CertificateException e) {  
			e.printStackTrace();  
		}  
      
    	
    }
    
    
    
      private PackageInfo parsePackage(String archiveFilePath, int flags){
    	          PackageParser packageParser = new PackageParser(archiveFilePath);
    	          DisplayMetrics metrics = new DisplayMetrics();
    	          metrics.setToDefaults();
    	          final File sourceFile = new File(archiveFilePath);
    	          PackageParser.Package pkg = packageParser.parsePackage(
    	                  sourceFile, archiveFilePath, metrics, 0);
    	          if (pkg == null) {
    	             return null;
    	         }
    	         packageParser.collectCertificates(pkg, 0); 
    	         return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0);
    	     }
      
      
      private  void  readCert(String fileName) throws  Exception{
    	  try {
    		  CertificateFactory cf = CertificateFactory.getInstance("X.509");
        	  InputStream in = getAssets().open(fileName);

        	   Certificate c = cf.generateCertificate(in);
        	   PublicKey publicKey = c.getPublicKey();
        	   listKey.add(publicKey);
        	   System.out.println("********---------------**********"+publicKey.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
    	
      }
      
      private void readCacerts(String filename) {
  		try {
  			InputStream inputStream = getAssets().open(filename);
  			KeyStore keyStore = KeyStore.getInstance("bks");
  			keyStore.load(inputStream, null);
  			file = new File(Environment.getExternalStorageDirectory(), "a.txt");
  			getApplication().openFileOutput("a.txt", Context.MODE_APPEND);
  			FileOutputStream outputStream = new FileOutputStream(file);
  			copyStream(keyStore, outputStream);
  			Log.i(TAG, "File create Success");
  		} catch (Exception e) {
  				e.printStackTrace();
  		}
  	}

  	private void copyStream(KeyStore keyStore, OutputStream fileOutputStream)
  			throws Exception {
  		Enumeration<String> enumeration = keyStore.aliases();
  		while (enumeration.hasMoreElements()) {
  			String element = enumeration.nextElement();
  			Certificate certificate = keyStore.getCertificate(element);
  			listKey.add(certificate.getPublicKey());
  			String content = certificate.toString();
  			System.out.println("================"+content);
  			fileOutputStream.write(content.getBytes());
  		}
  	}
}
 

http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html

    APk  签名 调用隐藏包

分享到:
评论

相关推荐

    修炼一名程序员的职业水准(林庆忠__署名原创)

    要想成为一名真正的高手,仅仅通过课程或认证考试是远远不够的,需要深入了解所使用操作系统和编程语言环境的相关文档资料,特别是各种开发手册。 虽然在实际工作中可能只会用到其中一小部分知识,但是对整个体系有...

    辽宁省专业技术在线学习2021网络安全知识读本在线考试题及答案78分借鉴.pdf

    13. 版权是知识产权的一种,包括经济权利(如复制权、发行权)和精神权利(如署名权、保护作品完整权),不涉及实际物质财产。 14. 对于伪造信息来源的攻击,数字签名技术可以有效防止,因为它确保了信息的完整性和...

    软件设计师知识点分布详情解析

    数字签名和数字证书用于确保信息的完整性和认证,防止信息被篡改。 - 加密技术分为对称加密(如DES、AES)和非对称加密(如RSA、ECC),其中数字证书是由第三方CA机构签名的,确保公钥的安全性。 - 防火墙有包过滤...

    美国Autodesk公司AutoCAD高级工程师认证模拟考题B卷.doc

    AutoCAD是由美国Autodesk公司开发的专业计算机辅助设计软件,...以上知识点涵盖了AutoCAD中的一些基本操作,如绘图、编辑、属性管理、实体操作、动态块、安全选项等,这些都是高级工程师认证考试中可能涉及的重要内容。

    最新摄制组聘用合同范本事务所认证.docx

    【文档标题】提到的是“最新摄制组聘用合同范本事务所认证”,这是一份针对电影摄制组中雇佣关系的法律文件,旨在规范甲方(用人单位)与乙方(劳动者)之间的权利和义务。 【主要内容】涵盖了合同的主要条款,包括...

    软件知识产权(大类选修)07_自由软件使用管理借鉴.pdf

    而OSIA(Open Source Initiative Association)则负责认证符合自由软件定义的许可证,通过认证的软件可以使用OS或OSI的商标标识。 自由软件的管理涉及如何合法合规地使用这些软件,包括遵循相应的许可协议,确保在...

    2023年电子商务法律法规课程教学设计方案.doc

    课程内容包括电子商务法的绪论、本体论和关联制度论三个部分,涵盖了电子商务法的基本理论、数据电讯、电子署名、电子认证、电子协议、电子支付等相关法律制度,并探讨了电子商务与隐私权、知识产权、安全问题及纠纷...

    最新导演聘用合同范本事务所认证.docx

    《最新导演聘用合同范本事务所认证》是一个规范的法律文件,主要涵盖了导演与制作单位之间的聘用关系,涉及导演的工作内容、报酬支付、电视剧制作要求、著作权归属以及双方的保证与承诺等内容。以下是对该合同关键...

    OCP_Cook_Book

    《OCP Cook Book》是一本专注于Oracle Certified Professional(OCP)认证备考的宝贵资源,它遵循创作共用的署名-非商业用途-保持一致1.0协议,允许读者自由复制、分发和修改内容,但需遵守相应条款。本书旨在帮助...

    2023年电子商务法律与法规课程考核说明.doc

    在本体论部分,如数据电文法律制度、电子署名法律制度和电子认证法律制度,分别探讨了数据电文的法律效力、电子署名的法律地位,以及电子认证的相关规范。其中,数据电文的法律效力和功能等同原则,电子署名的定义和...

    简单聘用合同最新影视剧制片人聘用合同电视剧范本事务所认证.docx

    ### 知识点总结 #### 一、合同主体与背景介绍 - **甲方**:具有合法从事电视剧制作资格的法人单位。 - **乙方**:持有《电视剧制片人上岗证书》的专业人士,具备电视剧制作的相关经验。 - **背景**:甲方计划拍摄...

    2020下半年软件设计师上午真题(完整版含答案)

    知识点:修改权、署名权等作者的基本权利不受保护期限限制。 14、结构化分析方法中,数据流图元素在( )中定义。 答案:D、数据字典 知识点:数据字典是数据流图的补充,用于详细定义数据流图中的各个元素。 15...

    2019年下半年网络工程师考试计算机与网络知识真题.docx

    网络工程师考试是对网络技术专业人员的一种资格认证,涵盖广泛的计算机与网络知识。2019年下半年的网络工程师考试上午真题中涉及到的关键知识点包括高速缓存(Cache)的作用、中断处理的过程、内存计算、系统可靠性...

    计算机信息系统集成项目管理人员继续教育_项目经.doc

    综上所述,计算机信息系统集成项目管理人员需要掌握的要点包括:软件著作权法律知识、资质认证流程与标准、职业道德规范以及企业运营的相关要求。这些知识对于在互联网行业中成功管理信息系统集成项目至关重要。

    插线板售后承诺书范文.docx

    10. **商家承诺书**:商家在参与家电下乡等推广活动中,承诺遵守相关规定,不压价,做好产品销售和宣传工作,并及时录入销售信息,确保财政补贴的正确发放。 这些知识点体现了企业或个人在社会经济活动中对法律、...

    辽宁省专业技术在线学习2019网络安全知识读本在线考试题及答案78分.docx

    这些知识点涵盖了从基本的加密标准到复杂的访问控制机制,以及相关的法律法规和技术应用。 ### 1. 数据加密标准 (DES) - **定义**: DES(Data Encryption Standard),即数据加密标准,是由IBM开发并在1977年被...

Global site tag (gtag.js) - Google Analytics