美文网首页
使用jdk自带工具手动给应用签名

使用jdk自带工具手动给应用签名

作者: M_天河 | 来源:发表于2020-08-29 14:17 被阅读0次

1,用keytool生成密钥文件

keytool -genkey -alias 【别名】-keyalg 【加密算法】-keystore 【密钥文件名/密钥完整路径】
例:keytool -genkey -alias bieming1 -keyalg RSA -keystore miyao1.jks


注意JKS是密钥库专用格式,迁移到PKCS12标准的命令好系统已经给出提示:
keytool -importkeystore -srckeystore miyao1.jks -destkeystore miyao1.jks -deststoretype pkcs12

2,查密钥文件

keytool -list -keystore 【密钥文件名/密钥完整路径】
例:keytool -list -keystore miyao1.jks

3,使用密钥文件对apk签名

jarsigner -verbose -keystore miyao1.jks -signedjar D:\shellProject\p1\reforce003.apk D:\shellProject\p1\re forceFuben.apk bieming1

4,检验签名后的apk

keytool -printcert -jarfile D:\shellProject\p1\reforce003.apk

5,提取公钥

keytool -export -alias 【密钥别名】-file 【导出路径】-keystore 【密钥文件路径】-storepass 【密码】
keytool -export -alias bieming1 -file publicKey.crt -keystore miyao1.jks -storepass ******其中的密码是密钥库文件的密码


用keytool命令可以查看导出的公钥文件:keytool -printcert -file 【证书路径】
例:keytool -printcert -file publicKey.crt

6,提取私钥

私钥不能通过命令行提取,需要通过java的KeyStore类的getEntry()或getKey()来获取私钥
例:

public static PrivateKey getPrivateKey(String keyStorePath, String alias, String password) {
    String keyStoreType = "jks";
    char[] pwd = password.toCharArray();
    try {
        FileInputStream fis = new FileInputStream(keyStorePath);
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(fis, password.toCharArray());
        KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, new KeyStore.PasswordProtection(pwd));
        return pkEntry.getPrivateKey();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (CertificateException e) {
        e.printStackTrace();
    } catch (UnrecoverableEntryException e) {
        e.printStackTrace();
    }
    return null;
}

相关文章

网友评论

      本文标题:使用jdk自带工具手动给应用签名

      本文链接:https://www.haomeiwen.com/subject/wcaidktx.html