方式2
在研究android的update簽名的過程中,,如果對update的文件進行了修改,必須在打包成update.zip之后,,進行簽名,,簽名是如何的呢,通過查看一個auto-sign的簽名工具的源碼發(fā)現(xiàn),,簽名的指令是這樣的:
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
第一個參數(shù)是公鑰,即前面第二步產(chǎn)生的testkey.x509.pem,。
第二個參數(shù)是私鑰,,即前面第三步產(chǎn)生的testkey.pk8,。
第三個參數(shù)是要簽名的文件。
第四個參數(shù)是輸出的文件(即簽名后的文件),。
那么簽名到底是怎樣一個過程呢,?
1.先為輸入的jar/zip文件中的所有文件生成SHA1數(shù)字簽名(除了CERT.RSA,CERT.SF和MANIFEST.MF)。
并把數(shù)字簽名信息寫入MANIFEST.MF
對manifest簽名并寫入CERT.SF
把對輸出文件的簽名和公鑰寫入CERT.RSA,。
簽名的作用是什么呢,?
簽名的主要目的為了檢測文件是否被別人修改了。但它并不能禁止別人修改,,因為你完全重新生成簽名,,但是你生成的簽名和原來是不一樣的。
第二部分:公鑰,、密鑰生成部分,。
在這個語句中,需要兩個文件一個是testkey.x509.pem
一個是testkey.pk8這倆個文件是什么呢,?
第一步:如何產(chǎn)生Key
首先要產(chǎn)生RSA私鑰(private
key),,如何產(chǎn)生呢,需要一個openssl的工具,,該工具在命令提示符下使用,。
先介紹openssl的用法,關于openssl是什么參閱:openssl
格式:openssl
-out -passout -des|-des3|-idea -F4|-3 -rand numbits 第一步:生成testkey.pem
openssl genrsa
-3 -out testkey.pem 2048
(-3 是算法的參數(shù)-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 產(chǎn)生PKCS#10格式的認證請求。所謂認證請求就是發(fā)給認證機構(gòu)認證的一個請求,,它主要包括一個公鑰和一些相關信息(如組織名稱和聯(lián)系人郵件地址),。 如果不提供最后兩個參數(shù),openssl會提示你輸入相關信息,,這里的信息可以根據(jù)你自己的實際情況填寫,。 第三布:生成testkey.pk8
openssl pkcs8
-in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt
把私鑰的格式轉(zhuǎn)換成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-簽名》