在java中获取X.509证书微缩图的方法
在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证书微缩图的方法相关推荐
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- java中获取文件夹路径,java中获取文件或文件夹的路径方法
获取当前类的所在工程路径; 如果不加"/" File f = new File(this.getClass().getResource("").getPath( ...
- Java中获取GBK编码汉字的拼音首字母(包括生僻字)
Java中获取GBK编码汉字的拼音首字母(包括生僻字) 前言 代码 结果 前言 网上关于Java中获取汉字的拼音首字母的方法很多,但大多基于GB2312的汉字所属编码位置判断方法,现有一种基于GBK编 ...
- 忽略Java中的自签名证书
我在职业生涯中遇到过几次问题,就是我们有时希望允许自签名证书用于开发或测试目的. Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦. 根据确切的证书问题,您可能会收到类似以下内容之一的 ...
- 如何在Android Studio中获取SHA-1指纹证书以获得调试模式?
本文翻译自:How to get the SHA-1 fingerprint certificate in Android Studio for debug mode? I have shifted ...
- JAVA中获取当前系统时间
JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...
- 【转】Java中获取文件大小的正确方法
[转]Java中获取文件大小的正确方法 本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关 ...
- JAVA中获取当前运行的类名,方法名,行数
JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...
- java List最大_在java中获取List集合中最大的日期时间操作
取list集合中最大的日期, 可以用date max = collections.max(datelist);, 传入一个日期集合, 就可以获取, 工作中有这个需求, 就查找到这个, 代码如下 } e ...
- Java中获取数据库中两个时间的相差秒数
场景 Java中获取数据库中结束时间与开始时间相差的秒数. 实现 Long betweenTime=0l;betweenTime =((b.getFinishTime().getTime()-b.ge ...
最新文章
- HTML5文档结构主体结构 语义结构,html5组织文档结构.pdf
- git的一些知识梳理以及命令操作
- php封装pdo实例以及pdo长连接的优缺点
- Spring Cloud Alibaba - 12 使用Nacos的元数据实现金丝雀发布功能
- linux curl 多线程,CURL多线程不执行一直在请求
- 微信小程序 全局变量异步函数_微信小程序制作简述
- 苹果成为存储厂商的新饽饽
- tensorflow之truncated_normal
- 【图像加密】基于matlab GUI混沌系统灰色图像加密解密(带面板)【含Matlab源码 1240期】
- 解决Linux下SSH等终端乱码问题
- windows文件自动同步
- Java实习生的一天
- 计算机鼠标游戏教学法,练习使用鼠标教案
- MT7621_移植篇(3) uboot编译+配置项分析
- 使用RX方式模拟DoubanFm的登陆
- 正大国际期货:什么是黄金保证金交易?黄金保证金交易包含哪些要点?
- 点线特征融合求取相机位姿
- MySQL NDB Cluster 搭建
- html5超链接不加下划线,css怎么让超链接不加下划线
- P3303 [SDOI2013]淘金