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

yipinrfr 2012-08-28 04:30:42

代码如下:

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下显示乱码,查了很多资料,都未能解决,请大侠帮帮,谢谢!
...全文
1403 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
神童哥 2014-08-28
  • 打赏
  • 举报
回复
不知道我的答案是否来迟了: http://blog.csdn.net/suntongo/article/details/38864413
  • 打赏
  • 举报
回复
现在有解决的办法吗,我也遇到这个问题了
cls271500551 2014-05-08
  • 打赏
  • 举报
回复
大神 后来咋解决的啊
愤怒的熊猫007 2012-08-31
  • 打赏
  • 举报
回复
通过证书的格式自己解析吧。http://baike.baidu.com/view/3579227.htm
yipinrfr 2012-08-29
  • 打赏
  • 举报
回复
原来编码是ASCII编码
yipinrfr 2012-08-29
  • 打赏
  • 举报
回复
试过了,没啥效果
yipinrfr 2012-08-28
  • 打赏
  • 举报
回复
我在MyEclipse下调试看到info = oCert.getSubjectDN().getName();
info显示乱码
逐Ls梦 2012-08-28
  • 打赏
  • 举报
回复
以这种new String(byt,"UTF-8")方式是否可以?
(或者其它编码,看它本来的编码格式)
AMinfo 2012-08-28
  • 打赏
  • 举报
回复
你这个是在Eclipse里面控制台显示乱码吧?

在右键点击项目 -> Properties -> Resource -> Text file encoding -> Other -> UTF-8

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧