当前位置:编程学习 > wap >>

Android Java 使用X509Certificate解析x509 v3证书中文问题


代码如下:

import java.io.*;
import java.security.cert.*;
import java.text.SimpleDateFormat;
import java.util.*;


public class CertManager
{
 public static void showCertInfo()
 {
  try
  {
   //读取证书文件

   File file = new File("/data/data/com.example.helloworld/files/test.cer");
   InputStream inStream = new FileInputStream(file);
   //创建X509工厂类
   CertificateFactory cf = CertificateFactory.getInstance("X.509");
   //创建证书对象
   X509Certificate oCert = (X509Certificate)cf.generateCertificate(inStream);
   inStream.close();
   SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); 
   String info = null;
   //获得证书版本
   info = String.valueOf(oCert.getVersion());
   System.out.println("证书版本:"+info);
   //获得证书序列号
   info = oCert.getSerialNumber().toString(16);
   System.out.println("证书序列号:"+info);
   //获得证书有效期
   Date beforedate = oCert.getNotBefore();
   info = dateformat.format(beforedate);
   System.out.println("证书生效日期:"+info);
   Date afterdate = oCert.getNotAfter();
   info = dateformat.format(afterdate);
   System.out.println("证书失效日期:"+info);
   //获得证书主体信息
   info = oCert.getSubjectDN().getName();
   System.out.println("证书拥有者:"+info); 
   //获得证书颁发者信息
   info = oCert.getIssuerDN().getName();
   System.out.println("证书颁发者:"+info); 
   //获得证书签名算法名称
   info = oCert.getSigAlgName();
   System.out.println("证书签名算法:"+info);


   byte[] byt = oCert.getExtensionValue("1.2.86.11.7.9");
   String strExt = new String(byt);
   System.out.println("证书扩展域:" + strExt);
    byt = oCert.getExtensionValue("1.2.86.11.7.1.8");
   String strExt2 = new String(byt);
   System.out.println("证书扩展域2:" + strExt2);
  }
  catch (Exception e) 
  {  
   System.out.println("解析证书出错!");
  }
 }//end showCertInfo
}

以下是在PC输出结果:

证书版本:3
证书序列号:4f2ce7941a87410a9db9f9c30477538a
证书生效日期:2011/07/12
证书失效日期:2013/07/11
证书拥有者:CN=测试证书-证书解析, O=河南CA, C=CN, OU=技术中心, L=郑州, ST=河南证书颁发者:CN=HNCA, O=HNCA, L=ZZ, ST=HN, C=CN
证书签名算法:SHA1withRSA
证书扩展域:1�410522123456789
证书扩展域2:  KZE123456

其中证书拥有者中文显示正常,改在Android下显示乱码,查了很多资料,都未能解决,请大侠帮帮,谢谢! --------------------编程问答-------------------- 你这个是在Eclipse里面控制台显示乱码吧?

在右键点击项目 ->  Properties -> Resource -> Text file encoding -> Other -> UTF-8
--------------------编程问答-------------------- 以这种new String(byt,"UTF-8")方式是否可以?
(或者其它编码,看它本来的编码格式) --------------------编程问答-------------------- 我在MyEclipse下调试看到info = oCert.getSubjectDN().getName();
info显示乱码 --------------------编程问答-------------------- 试过了,没啥效果 --------------------编程问答-------------------- 原来编码是ASCII编码 --------------------编程问答-------------------- 通过证书的格式自己解析吧。http://baike.baidu.com/view/3579227.htm
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,