zoukankan      html  css  js  c++  java
  • Android数字签名解析(三)

    在刚才開始学习android数字签名的相关知识点的时候,被资料中出现的keystore、x509、密钥对、debug.keystore弄的晕头

    转向。经过一段时间的了解,总算明确一些。

    一、make_key脚本生成密钥对

    android源代码中自带的工具make_key(development/tools/文件夹下)能够用来生成RSA密钥对。

    ./make_key test ‘/C=CN/ST=SH/L=SH/O=TEST/OU=TEST/CN=TEST’

    执行以上命令将生成密钥对test.pk8和test.x509.pem。该命令中, /C表示“Country Code”,/ST表示“State orProvince”,/L表示“City or 

    Locality”。/O表示“Organization”。/OU表示“Organizational Unit”。/CN表示“Name”。

    make_key脚本中关键代码如下:

    </pre></div></blockquote><pre name="code" class="html">( openssl genrsa -f4 2048 | tee ${one} > ${two} ) &
    openssl req -new -x509 -sha1 -key ${two} -out $1.x509.pem 
      -days 10000 -subj "$2" &
    if [ "${password}" == "" ]; then
      echo "creating ${1}.pk8 with no password"
      openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 -nocrypt
    else
      echo "creating ${1}.pk8 with password [${password}]"
      echo $password | openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 
        -passout stdin

    事实上主要利用了openssl来实现, openssl是一个强大的命令。要了解openssl, 能够參考百度百科http://baike.baidu.com/view/300712.htm?fr=aladdin

    二、keytool生成密钥

    Android数字签名解析(一)中介绍过用keytool生成密钥的方法,

    keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore

    keytool为JDK中自带的工具,一些第三方的应用开发人员。因为没有Android源代码环境, 所以会採用keytool来生成密钥。


    三、make_key生成的密钥对转换为keystore中的密钥


    1、把pkcs8格式的私钥转换为pkcs12格式:

         openssl pkcs8 -in test.pk8 -inform DER -outform PEM -out test.priv.pem -nocrypt

    2、生成pkcs12格式的密钥文件:

         openssl pkcs12 -export -in test.x509.pem -inkey test.priv.pem -out test.pk12 -name testkey

    3、生成keystore:

         keytool -importkeystore -deststorepass android -destkeypass android -destkeystore test.keystore -srckeystore  shared.pk12

    srcstoretype PKCS12 -srcstorepass android -alias testkey

    这样就生成了一个名为test.keystore的keystore文件。就能够用这个文件对apk签名。

    四、keystore中的密钥转换为密钥对

    1、keystore文件转换为pkcs12格式
         keytool -importkeystore -srckeystore test.keystore -destkeystore test.p12 -srcstoretype JKS -   deststoretype PKCS12   

    2、dump pkcs12 文件
         openssl pkcs12 -in test.p12 -nodes -out test.rsa.pem  

    3、以文本形式打开test.rsa.pem。复制“BEGIN CERTIFICATE”  “END CERTIFICATE”之间的内容到一个文件

    test.x509.pem, 即公钥

    4、复制 “BEGIN RSA PRIVATE KEY”“END RSA PRIVATE KEY” 之间的内容到一个文件test.rsa.pem,然后执行例如以下命令
         
    openssl pkcs8 -topk8 -outform DER -in     test.rsa.pem -inform PEM -out test.pk8 -nocrypt  

    这样就test.x509.pem和test.pk8就生成了.





  • 相关阅读:
    阿杜复博通知
    vim 配置文件 ,高亮+自动缩进+行号+折叠+优化
    网络课设总结(五)——利用CAsyncSocket进行异步通信
    网络课设总结(四)——利用CAsyncSocket进行异步通信
    网络课设总结(三)——VC++应用技巧
    ubuntu11.10下配置adsl上网
    反省
    cp命令“d”参数解释及实例
    网络课设总结(二)——VC开发环境
    SharePoint中如何获得当前用户的loginName
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5153111.html
Copyright © 2011-2022 走看看