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;
}