在IE中查看证书信息,在证书详细信息标签页中的最下面有证书的“微缩图算法”和“微缩图”2个值。

微缩图的概念是微软自己定义的,其原理就是对证书的编码信息再做一次sha1的摘要。注:sha1就是微缩图算法,该值也可能为MD5.

在java的Certificate类中,不能直接得到微缩图,需要根据微缩图的算法和其原理得到微缩图。

具体代码如下:

package com.wiflish.framework.util;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/*** 获取证书微缩图的工具类。* * @author wiflish* */
public class TummbPrintUtils {private static final Log logger = LogFactory.getLog(TummbPrintUtils.class);/*** 获取微缩图。* * @param cert 证书。* @param thumAlg 微缩图算法。* @param delimiter 分隔符,如:":"* @return 返回微缩图。*/public static String getThumbprint(X509Certificate cert, String thumAlg, String delimiter) {if (cert == null) {return null;}if (thumAlg == null || thumAlg.length() == 0) {return null;}String thumbPrint = "";try {MessageDigest md = MessageDigest.getInstance(thumAlg);byte rawDigest[] = md.digest(cert.getEncoded());thumbPrint = getHex(rawDigest, delimiter);} catch (NoSuchAlgorithmException e) {thumbPrint = "";logger.error("不支持[" + thumAlg + "]算法!", e);} catch (CertificateEncodingException e) {thumbPrint = "";logger.error("证书编码异常!", e);}return thumbPrint;}/*** 获取证书微缩图,默认使用sha1算法,默认微缩图字符串不进行分隔。* * @param cert 证书* @return*/public static String getThumbprint(X509Certificate cert) {return getThumbprint(cert, "sha1", null);}/*** 获取证书微缩图。默认使用sha1算法,使用指定的分隔符进行分隔。* * @param cert 证书。* @param delimiter 指定的分隔符,如:":"。* @return*/public static String getThumbprint(X509Certificate cert, String delimiter) {return getThumbprint(cert, "sha1", delimiter);}/*** 将将证书摘要转换为16进制字符串,即得到证书微缩图。* * @param buf* @param delimiter* @return*/private static String getHex(byte buf[], String delimiter) {String result = "";if (buf == null) {return "";}String defaultDelimiter = "";if (delimiter != null && delimiter.length() > 0) {defaultDelimiter = delimiter;}for (int i = 0; i < buf.length; i++) {if (i > 0) {result += defaultDelimiter;}short sValue = buf[i];int iValue = 0;iValue += sValue;String converted = Integer.toHexString(iValue);if (converted.length() > 2) {converted = converted.substring(converted.length() - 2);}// 只有1位数时,前面补0。else if (converted.length() < 2) {converted = ("0" + converted);}// 将微缩图都转换为大写字母。result += converted.toUpperCase();}return result;}
}

在java中获取X.509证书微缩图的方法相关推荐

  1. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  2. java中获取文件夹路径,java中获取文件或文件夹的路径方法

    获取当前类的所在工程路径; 如果不加"/" File f = new File(this.getClass().getResource("").getPath( ...

  3. Java中获取GBK编码汉字的拼音首字母(包括生僻字)

    Java中获取GBK编码汉字的拼音首字母(包括生僻字) 前言 代码 结果 前言 网上关于Java中获取汉字的拼音首字母的方法很多,但大多基于GB2312的汉字所属编码位置判断方法,现有一种基于GBK编 ...

  4. 忽略Java中的自签名证书

    我在职业生涯中遇到过几次问题,就是我们有时希望允许自签名证书用于开发或测试目的. Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦. 根据确切的证书问题,您可能会收到类似以下内容之一的 ...

  5. 如何在Android Studio中获取SHA-1指纹证书以获得调试模式?

    本文翻译自:How to get the SHA-1 fingerprint certificate in Android Studio for debug mode? I have shifted ...

  6. JAVA中获取当前系统时间

    JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...

  7. 【转】Java中获取文件大小的正确方法

    [转]Java中获取文件大小的正确方法 本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关 ...

  8. JAVA中获取当前运行的类名,方法名,行数

    JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...

  9. java List最大_在java中获取List集合中最大的日期时间操作

    取list集合中最大的日期, 可以用date max = collections.max(datelist);, 传入一个日期集合, 就可以获取, 工作中有这个需求, 就查找到这个, 代码如下 } e ...

  10. Java中获取数据库中两个时间的相差秒数

    场景 Java中获取数据库中结束时间与开始时间相差的秒数. 实现 Long betweenTime=0l;betweenTime =((b.getFinishTime().getTime()-b.ge ...

最新文章

  1. HTML5文档结构主体结构 语义结构,html5组织文档结构.pdf
  2. git的一些知识梳理以及命令操作
  3. php封装pdo实例以及pdo长连接的优缺点
  4. Spring Cloud Alibaba - 12 使用Nacos的元数据实现金丝雀发布功能
  5. linux curl 多线程,CURL多线程不执行一直在请求
  6. 微信小程序 全局变量异步函数_微信小程序制作简述
  7. 苹果成为存储厂商的新饽饽
  8. tensorflow之truncated_normal
  9. 【图像加密】基于matlab GUI混沌系统灰色图像加密解密(带面板)【含Matlab源码 1240期】
  10. 解决Linux下SSH等终端乱码问题
  11. windows文件自动同步
  12. Java实习生的一天
  13. 计算机鼠标游戏教学法,练习使用鼠标教案
  14. MT7621_移植篇(3) uboot编译+配置项分析
  15. 使用RX方式模拟DoubanFm的登陆
  16. 正大国际期货:什么是黄金保证金交易?黄金保证金交易包含哪些要点?
  17. 点线特征融合求取相机位姿
  18. MySQL NDB Cluster 搭建
  19. html5超链接不加下划线,css怎么让超链接不加下划线
  20. P3303 [SDOI2013]淘金

热门文章

  1. 通过简单实例讲解QQ开放平台登录原理
  2. 1等于0.循环9吗?
  3. 大商圈.资本运作 书摘
  4. SNS过早收费扼杀用户成长
  5. c语言中如何找坐标,如何在C语言中找到四个坐标并擦除RubberBand矩形的绘图#
  6. 查杀计算机病毒,计算机病毒查杀
  7. PE头之IMAGE_FILE_HEADER解析
  8. 计算机不支持格式,显示视频格式不支持怎么处理,需要什么软件
  9. 往前走吧,管它未来是什么!!
  10. 网站的友情链接是什么?