久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android中的簽名方式2

 lifei_szdz 2013-01-16
方式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 是android為jar/zip/apk文件簽名的程序

第一個參數(shù)是公鑰,即前面第二步產(chǎn)生的testkey.x509.pem,。
第二個參數(shù)是私鑰,,即前面第三步產(chǎn)生的testkey.pk8,。
第三個參數(shù)是要簽名的文件。
第四個參數(shù)是輸出的文件(即簽名后的文件),。

那么簽名到底是怎樣一個過程呢,?
1.先為輸入的jar/zip文件中的所有文件生成SHA1數(shù)字簽名(除了CERT.RSA,CERT.SF和MANIFEST.MF)。
        for (JarEntry entry: 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.getInputStream(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, attr);
            }
        }
并把數(shù)字簽名信息寫入MANIFEST.MF
            je = new JarEntry(JarFile.MANIFEST_NAME);
            je.setTime(timestamp);
            outputJar.putNextEntry(je);
            manifest.write(outputJar);
對manifest簽名并寫入CERT.SF    
            Signature signature = Signature.getInstance("SHA1withRSA");
            signature.initSign(privateKey);
            je = new JarEntry(CERT_SF_NAME);
            je.setTime(timestamp);
            outputJar.putNextEntry(je);
            writeSignatureFile(manifest,
            new SignatureOutputStream(outputJar, signature));
把對輸出文件的簽名和公鑰寫入CERT.RSA,。
            je = new JarEntry(CERT_RSA_NAME);
            je.setTime(timestamp);
            outputJar.putNextEntry(je);
            writeSignatureBlock(signature, publicKey, outputJar);
簽名的作用是什么呢,?
簽名的主要目的為了檢測文件是否被別人修改了。但它并不能禁止別人修改,,因為你完全重新生成簽名,,但是你生成的簽名和原來是不一樣的。

第二部分:公鑰,、密鑰生成部分,。
在這個語句中,需要兩個文件一個是testkey.x509.pem 一個是testkey.pk8這倆個文件是什么呢,?
第一步:如何產(chǎn)生Key

首先要產(chǎn)生RSA私鑰(private key),,如何產(chǎn)生呢,需要一個openssl的工具,,該工具在命令提示符下使用,。
先介紹openssl的用法,關于openssl是什么參閱:openssl

格式:openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [numbits] 
-out filename       (私有密鑰輸入文件名,,缺省為標準輸出。)
-passout arg
-des|-des3|-idea    (采用什么加密算法來加密我們的密鑰,。一般會要你輸入保護密碼,。 如果這三個中一個也沒                                   set, 我們的密鑰將不被加密而輸入。)
-F4|-3                   使用的公共組件,,一種是3, 一種是F4, 我也沒弄懂這個option是什么意思,。 
-rand file(s)            產(chǎn)生key的時候用過seed的文件,可以把多個文件用冒號分開一起做seed. 
numbits
          指明產(chǎn)生的參數(shù)的長度,。必須是本指令的最后一個參數(shù),。如果沒有指明,則產(chǎn)生512bit長的參數(shù),。

第一步:生成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
    echo "Create a test certificate key."
    echo "Usage: $0 NAME"
    echo "Will generate NAME.pk8 and NAME.x509.pem"
    echo "  /C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]"
    return
fi
openssl genrsa -3 -out $1.pem 2048
openssl req -new -x509 -key $1.pem -out $1.x509.pem -days 10000 \
    -subj '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -nocrypt

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多