【C#与Apk二三事】Java版Android Keystore验证方法

这个工具用于验证Keystore的有效性,包括过期时间。Keystore用于对apk签名,可以使用JDK的 Keytool.exe 来生成,如果想要用直观点GUI的方式来生成,可以借助比如Eclipse等工具。
  下面是ApkIDE中提供的 KeystoreVerify.jar 工具中使用的核心代码(Java代码,桌面app使用),也就是Keystore的验证方法:

//引入相关类库
import java.security.KeyStore;
import java.security.cert.X509Certificate;

//验证方法
private String getKeystoreInfo(String keystoreFile, char[] keystorePassword, char[] keyPassword){
        String myerr="";
        try {
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(new FileInputStream(keystoreFile), keystorePassword);
            Enumeration aliases = keystore.aliases();
            while(aliases.hasMoreElements()){
                String alias = aliases.nextElement();
                if(keystore.getCertificate(alias).getType().equals("X.509")){
                    try{
                        keystore.getKey(alias, keyPassword);
                    }catch(Exception e){
                        if(this.isDoverify) myerr="验证失败!";
                        myerr+="Key Password错误:"+e.getMessage();
                        break;
                    }
                    String inf="";
                    if(this.isDoverify){
                        if(this.keyAlias.equalsIgnoreCase(alias)) inf="验证成功!";
                        else inf="验证失败!别名错误。";
                    }
                    else inf="别名:"+ alias;
                    return inf + " 过期时间:" + dateToString(((X509Certificate) keystore.getCertificate(alias)).getNotAfter());
                }
            }
        } catch (Exception e) {
            if(this.isDoverify) myerr="验证失败!";
            myerr += "Keystore Password错误:"+e.getMessage();
        }
        return myerr;
    }
    
    private String dateToString(Date date){
        SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return fmt.format(date);
    }

by Mandarava(鳗驼螺) 2017.06.19

你可能感兴趣的:(【C#与Apk二三事】Java版Android Keystore验证方法)