方式2
在研究android的update签名的过程中,如果对update的文件进行了修改,必须在打包成update.zip之后,进行签名,签名是如何的呢,通过查看一个auto-sign的签名工具的源码发现,签名的指令是这样的:
java -jar
signapk.jar testkey.x509.pem testkey.pk8 update.zip
update-sign.zip
第一部分:指令部分。
通过查阅资料得之:
它的用法如下:
Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar
output.jar
signapk.jar
第一个参数是公钥,即前面第二步产生的testkey.x509.pem。
第二个参数是私钥,即前面第三步产生的testkey.pk8。
第三个参数是要签名的文件。
第四个参数是输出的文件(即签名后的文件)。
那么签名到底是怎样一个过程呢?
1.先为输入的jar/zip文件中的所有文件生成SHA1数字签名(除了CERT.RSA,CERT.SF和MANIFEST.MF)。
并把数字签名信息写入MANIFEST.MF
对manifest签名并写入CERT.SF
把对输出文件的签名和公钥写入CERT.RSA。
签名的作用是什么呢?
签名的主要目的为了检测文件是否被别人修改了。但它并不能禁止别人修改,因为你完全重新生成签名,但是你生成的签名和原来是不一样的。
第二部分:公钥、密钥生成部分。
在这个语句中,需要两个文件一个是testkey.x509.pem
一个是testkey.pk8这俩个文件是什么呢?
第一步:如何产生Key
首先要产生RSA私钥(private
key),如何产生呢,需要一个openssl的工具,该工具在命令提示符下使用。
先介绍openssl的用法,关于openssl是什么参阅:openssl
格式:openssl
-out -passout -des|-des3|-idea -F4|-3 -rand numbits 第一步:生成testkey.pem
openssl genrsa
-3 -out testkey.pem 2048
(-3 是算法的参数-out
输出到testke.pem这个文件2048 是私钥长度。)
第二步:生成testkey.x509.pem
openssl req
-new -x509 -key testkey.pem -out testkey.x509.pem -days 10000
\
-subj ‘/C=US/ST=California/L=Mountain 产生PKCS#10格式的认证请求。所谓认证请求就是发给认证机构认证的一个请求,它主要包括一个公钥和一些相关信息(如组织名称和联系人邮件地址)。 如果不提供最后两个参数,openssl会提示你输入相关信息,这里的信息可以根据你自己的实际情况填写。 第三布:生成testkey.pk8
openssl pkcs8
-in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt
把私钥的格式转换成PKCS #8(Private-Key Information Syntax
Standard.) 私钥是不能让别人知道的,否则就起不到保密的作用了。私钥通常是要加密保存的,但这里指定了-nocryp,表示不加密。 Android提供了一个脚本mkkey.sh用来简化上面的步骤: if ["$1" == ""]; then fi openssl genrsa -3 -out $1.pem 2048 openssl req -new -x509 -key $1.pem -out $1.x509.pem -days 10000 \ openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -nocrypt |
|
来自: lifei_szdz > 《android-签名》