Android中的签名机制

上传人:人*** 文档编号:513079500 上传时间:2022-11-28 格式:DOC 页数:15 大小:1.32MB
返回 下载 相关 举报
Android中的签名机制_第1页
第1页 / 共15页
Android中的签名机制_第2页
第2页 / 共15页
Android中的签名机制_第3页
第3页 / 共15页
Android中的签名机制_第4页
第4页 / 共15页
Android中的签名机制_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Android中的签名机制》由会员分享,可在线阅读,更多相关《Android中的签名机制(15页珍藏版)》请在金锄头文库上搜索。

1、Android中的签名机制 /C=CN/ST=ShanDao/L=QingDao/O=Haier/OU=Haier/CN=Haier/emailAddress=Haier时请注明出处和作者联系方式文章出处: 昨天看了一下Android中的签名机制,这里介绍一下Android中签名用的Key的产生方法和签名的原理。产生Keyo 产生RSA私钥(private key)openssl genrsa -3 -out testkey.pem 2048-3 是算法的参数(public exponent)。2048 是私钥长度。testkey.pem 是输出的文件。o 产生PKCS#10格式的认证请求。所

2、谓认证请求就是发给认证机构认证的一个请求,它主要包括一个公钥和一些相关信息(如组织名称和联系人地址)。openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 /-subj /C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=androidandroid.如果不提供最后两个参数,openssl会提示你输入相关信息,这里的信息可以根据你自己的实际情况填写。如:openssl req -new -x5

3、09 -key testkey.pem -out testkey.x509.pem -days 10000You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fiel

4、ds there will be a default value,If you enter ., the field will be left blank.Country Name (2 letter code) GB:CNState or Province Name (full name) Berkshire:GuangDongLocality Name (eg, city) Newbury:ShenZhenOrganization Name (eg, company) My Company Ltd:TopwiseOrganizational Unit Name (eg, section)

5、:BronchoCommon Name (eg, your name or your servers hostname) :Email Address :bronchosalesgmail.o 把私钥的格式转换成PKCS #8(Private-Key Information Syntax Standard.)openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt私钥是不能让别人知道的,否则就起不到的作用了。私钥通常是要加密保存的,但这里指定了-nocryp,表示不加密。Android提供了一个脚本m

6、kkey.sh用来简化上面的步骤:if $1 = ; thenecho Create a test certificate key.echo Usage: $0 NAMEecho Will generate NAME.pk8 and NAME.x509.pemecho /C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=androidandroid.returnfiopenssl genrsa -3 -out $1.pem 2048openssl req -new -x509 -key

7、 $1.pem -out $1.x509.pem -days 10000 /-subj /C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=androidandroid.openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -nocrypt签名Android提供了为jar/zip文件签名的程序signapk.jar 。它的用法如下:Usage: signapk publickey.x509.pem privatekey.pk8

8、 input.jar output.jar第一个参数是公钥,即前面第二步产生的testkey.x509.pem。第二个参数是私钥,即前面第三步产生的testkey.pk8。第三个参数是要签名的文件。第四个参数是输出的文件(即签名后的文件)。如:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update-signed.zip现在我们来看看签名到底做了些什么:o 先为输入的jar/zip文件中的所有文件生成SHA1数字签名(除了CERT.RSA,CERT.SF和MANIFEST.MF)for (JarEntry entr

9、y: byName.values() String name = entry.getName();if (!entry.isDirectory() && !name.equals(JarFile.MANIFEST_NAME) &&!name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME) &&(stripPattern = null |!stripPattern.matcher(name).matches() InputStream data = jar.getInputSt

10、ream(entry);while (num = data.read(buffer) > 0) md.update(buffer, 0, num);Attributes attr = null;if (input != null) attr = input.getAttributes(name);attr = attr != null ? new Attributes(attr) : new Attributes();attr.putValue(SHA1-Digest, base64.encode(md.digest();output.getEntries().put(name, att

11、r);并把数字签名信息写入MANIFEST.MFje = new JarEntry(JarFile.MANIFEST_NAME);je.setTime(timestamp);outputJar.putNextEntry(je);manifest.write(outputJar);o 对manifest签名并写入CERT.SF/ CERT.SFSignature signature = Signature.getInstance(SHA1withRSA);signature.initSign(privateKey);je = new JarEntry(CERT_SF_NAME);je.setTi

12、me(timestamp);outputJar.putNextEntry(je);writeSignatureFile(manifest,new SignatureOutputStream(outputJar, signature);o 把对输出文件的签名和公钥写入CERT.RSA。/ CERT.RSAje = new JarEntry(CERT_RSA_NAME);je.setTime(timestamp);outputJar.putNextEntry(je);writeSignatureBlock(signature, publicKey, outputJar);签名的作用签名的主要目的为

13、了检测文件是否被别人修改了。但它并不能禁止别人修改,因为你完全重新生成签名,但是你生成的签名和原来是不一样的。分享到: 上一篇:系统程序员成长计划-并发(四)(下) 下一篇:系统程序员成长计划-并发(五)android apk签名(为什么 如何做 验证)android apk签名(为什么 如何做 验证)这篇文章其实就是根据自己的疑问然后结合多个文章结合成的文章引用:liangxh2008.blog.163./blog/static/1646855/ 1、发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换2、保证信息传输的

14、完整性,签名对于包中的每个文件进行处理,以此确保包中容不被替换,防止交易中的抵赖发生,Market对软件的要求二、签名的说明:1、所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序2、Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证3、如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布4、 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能5、签名后需使用zipalign优化程序6、Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序三、签名的方法:1、 用eclipse插件方式签名2、 调试签名eclipse插件默认赋予程序一个DEBUG权限的签名,此签名的程序不能发布到market上,此签名有效期为一年,如果过期则导致你无法生成apk文件,此时你只要删除debug keystore

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号