在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;
}
}
分享到:
相关推荐
在IT行业中,生成微缩图是一项常见的图像处理任务,它主要应用于网站、应用程序或数据库中,以节省存储空间,加快页面加载速度,并提供快速预览功能。本篇将详细讲解生成微缩图的过程以及自动保存的实现方法。 一、...
在Java的知识体系中,我们可以看到以下几个核心要点: 1. **Java 版本**:Java 2 分为三个主要版本,包括J2SE(标准版)、J2EE(企业版)和J2ME(微缩版)。J2SE是用于桌面应用和基础商务应用的基础平台,J2EE则...
- **编写**:在Java开发环境中编写源代码,保存为`.java`文件。 - **编译**:使用`javac`编译器将`.java`文件编译成`.class`字节码文件。 - **运行**:使用`java`命令解释执行`.class`文件。 #### 四、Java的字节码...
20. **方法**:方法是类中定义的行为,包含一系列语句。 21. **异常处理**:Java支持try-catch-finally语句块进行异常处理,可以指定方法可能抛出的异常类型。 以上内容涵盖了Java的基础知识,包括语言结构、运行...
Java API,全称为Java应用程序接口,是Java编程语言的核心组成部分,包含了Java平台标准版(Java SE)、企业版(Java EE)以及微缩版(Java ME)等不同版本的类库和接口。这些API为开发者提供了丰富的功能,涵盖了从...
它们是Java 8及后续版本中引入的一个重要的新特性,允许将函数作为参数传递给方法,或者将方法作为值存储在变量中。函数式接口是Lambda表达式的基础,通过Lambda表达式可以为接口的抽象方法提供实现,使得代码更加...
- **语言排名**:Java在编程语言排行榜中常年稳居前列,显示出其强大的影响力和广泛的适用性。 - **核心特点**:Java最显著的特点之一就是跨平台性,即“一次编译,到处运行”。这一特性得益于Java虚拟机(JVM)的...
在创建微缩图的过程中,关键步骤包括: 1. **解码原始JPEG图像**:调用`jpeg_read_header`来读取JPEG文件的元数据,包括图像的宽度、高度、颜色空间等信息,然后使用`jpeg_start_decompress`开始解码过程。 2. **...
图片智能微缩模块是计算机视觉领域中的一个重要技术,主要用于处理大量图像数据,特别是在大数据和云计算环境中。这个模块的目的是在不显著降低图像质量的前提下,减少图像的存储空间和传输带宽,提高系统效率。...
3. 维护追溯:在维修或售后服务中,通过读取微缩二维码,快速获取设备的维修记录和保修信息。 五、微缩二维码信息安全线的未来发展趋势 随着科技的进步,微缩二维码信息安全线的应用前景广阔。未来可能在物联网...
文件概述了设计模式的基本概念和如何在Java程序设计中应用基本的设计模式,如单例模式、工厂方法、值对象、DAO模式、责任链模式和迭代器模式。 最后,文件探讨了学习Java的方法和思考方式,强调了认识事物的一般...
在PHP中,生成微缩图是一项常见的任务,特别是在网站开发中,用于优化图像显示和减少服务器负载。本文将深入探讨如何使用PHP函数来创建微缩图,并解释相关的知识点。 首先,PHP中最常用的图像处理库是GD库,它包含...
2. JME(Java Micro Edition):微缩版,用于移动设备和嵌入式系统的开发。 3. JEE(Java Enterprise Edition):企业版,针对大型企业级应用,如Web服务、分布式系统等。 在使用Java进行开发时,安装Java ...
5. 在书籍中使用的商标名称、标志和图片可能未加商标符号,但出于对商标所有者的尊重,作者声明无意侵犯任何商标权。 6. 出版社和作者声明所提供的建议和信息在出版日期时是真实准确的,但由于编写到出版过程中可能...
4. 在场景中加入其它活动对象(加入了动物,现在我还没有叫它们跑。) 游戏操作方法: A、在场景内点任意点,指挥主角移动。 B、将鼠标移到场景外,可以移动地图。 C、在微缩地图上点一下,可以快速定位。 D、ESC...
标题《SQL2 Java:SQL访问基于Java的数据库系统》所描述的是一种数据库管理系统(DBMS)的开发,重点是实现SQL语言与基于Java的数据库系统的交互。这项工作由Chris Lambert完成,并作为获取计算机科学硕士学位的一部分...
Java技术体系主要由三部分组成:Java平台标准版(Java SE)、Java平台企业版(Java EE)、Java平台微缩版(Java ME)。Java SE为Java桌面和工作组级应用的开发与运行提供了环境。它的实现主要包括Java SE ...
在学习Java的过程中,搭建开发环境是第一步,这包括下载、安装和配置JDK(Java Development Kit)。JDK是Java开发工具包,是运行Java程序所必需的。配置JDK环境变量使得系统可以识别Java命令,从而可以编译和运行...