完整word版,Java 生成数字证书系列
java如何生成word文档_使用Java生成word文档(附源码)

java如何生成word文档_使用Java生成word文档(附源码)当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档。
但是当我们需要动态生成word时,通常不仅要能够显示word中的内容,还要能够很好的保持word中的复杂样式。
这时如果再使用IText和POI去操作,就好比程序员去搬砖一样痛苦。
这时候,我们应该考虑使用FreeMarker的模板技术快速实现这个复杂的功能,让程序员在喝咖啡的过程中就把问题解决。
实现思路是这样的:先创建一个word文档,按照需求在word中填好一个模板,然后把对应的数据换成变量${},然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档,去掉多余的xml符号,使用Freemarker读取这个文档然后替换掉变量,输出word文档即可。
具体过程如下:1.创建带有格式的word文档,将该需要动态展示的数据使用变量符替换。
2.将刚刚创建的word文档另存为xml格式。
3.编辑这个XMl文档去掉多余的xml标记,如图中蓝色部分4.从官网最新的开发包,将freemarker.jar拷贝到自己的开发项目中。
5.新建DocUtil类,实现根据Doc模板生成word文件的方法package com.favccxx.secret.util;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateExceptionHandler;public class DocUtil {privateConfiguration configure = null;publicDocUtil(){configure= new Configuration();configure.setDefaultEncoding("utf-8");}/*** 根据Doc模板生成word文件* @param dataMap Map 需要填入模板的数据* @param fileName 文件名称* @param savePath 保存路径*/publicvoid createDoc(Map dataMap, String downloadType, StringsavePath){try{//加载需要装填的模板Templatetemplate = null;//加载模板文件configure.setClassForTemplateLoading(this.getClass(),"/com /favccxx/secret/templates");//设置对象包装器configure.setObjectWrapper(newDefaultObjectWrapper());//设置异常处理器configure.setT emplateExceptionHandler(TemplateException Handler.IGNORE_HANDLER);//定义Template对象,注意模板类型名字与downloadType要一致template= configure.getTemplate(downloadType + ".xml");//输出文档FileoutFile = new File(savePath);Writerout = null;out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));template.process(dataMap,out);outFile.delete();}catch (Exception e) {e.printStackTrace();}}}6.用户根据自己的需要,调用使用getDataMap获取需要传递的变量,然后调用createDoc方法生成所需要的文档。
Java完美生成word的解决方案

POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。
iText操作Excel还行。
对于复杂的大量的word也是噩梦。
直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。
Word从2003开始支持XML格式,用XML还做就很简单了。
大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。
经测试这样方式生成的word 文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office 中编辑文档完全一样。
看看实际效果:首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:将编辑好的文档另存为XML再用Firstobject free XML editor【Firstobject free XML editor的使用见这里】将xml中我们需要填数据的地方打上FreeMarker标记【FreeMarker的语法见这里】最后生成的文档样式主要程序代码:view sourceprint?01 package com.havenliu.document;0203 import java.io.BufferedWriter;04 import java.io.File;05 import java.io.FileNotFoundException;06 import java.io.FileOutputStream;07 import java.io.IOException;08 import java.io.OutputStreamWriter;09 import java.io.Writer;10 import java.util.ArrayList;11 import java.util.HashMap;12 import java.util.List;13 import java.util.Map;1415 import freemarker.template.Configuration;16 import freemarker.template.Template;17 import freemarker.template.TemplateException;1819 public class DocumentHandler {20 private Configuration configuration = null;2122 public DocumentHandler() {23 configuration = new Configuration();24 configuration.setDefaultEncoding("utf-8");25 }2627 public void createDoc() {28 //要填入模本的数据文件29 Map dataMap=new HashMap();30 getData(dataMap);31 //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。
Java 生成数字证书系列

8)
指纹及指纹算法(Thumbprint、Thumbprint algorithm)
指纹以及指纹算法, 在证书发布的时候, 发布机构会根据指纹算法先计算出整个证书的 hash 值,并使用证书发布机构的私钥对其进行签名构成一个指纹,并将指纹与该证书放在 一起。
在生成证书的时候,需要自己设定颁发者、有效期、使用者等等。版本、签名算法、以 及证书公钥等都是要设定的,否则生成的证书是无法正常使用的。
5. 工作原理
数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设 定一把特定的仅为本人所知的私有密钥(私钥) ,用它进行解密和签名;同时设定一把公共 密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。 当发送一份保密文件时, 发送方使用接收方的公钥对数据加密, 而接收方则使用自己的 私钥解密, 这样信息就可以安全无误地到达目的地了。 通过数字的手段保证加密过程是一个 不可逆过程,即只有用私有密钥才能解密。 在公开密钥密码体制中,常用的一种是 RSA 体制。其数学原理是将一个大数分解成两 个质数的乘积,加密和解密用的是两个不同的密钥。即使已知明文、密文和加密密钥(公开 密钥) ,想要推导出解密密钥(私密密钥) ,在计算上是不可能的。
证书所有人的名称,命名规则一般采用 X.500 格式; 证书所有人的公开密钥; 证书发行者对证书的签名。
作为文件形式存在的证书一般有这几种格式:
带有私钥的证书由 Public Key Cryptography Standards #12,PKCS#12 标准定义, 包含了公钥和私钥的二进制格式的证书形式,以 pfx 作为证书文件后缀名。 二进制编码的证书中没有私钥,DER 编码二进制格式的证书文件,以 cer 作为证书文 件后缀名。 Base64 编码的证书证书中没有私钥,BASE64 编码格式的证书文件,也是以 cer 作 为证书文件后缀名。 由此可看出,只有 pfx 格式的数字证书是包含有私钥的,cer 格式的数字证书里面只有 公钥没有私钥。当然,我们经常使用的数字证书就是 cer 格式的,比如,12306 颁发的数 字证书,就是这种格式的,购票之前,需要在自己的电脑上安装证书,以确保我们的客户端 可以与正确的服务器进行通信。 当然,正如上面所说,CA 证书还是可以自己生成的,只不过自己生成的证书对于操作 系统来说,是识别不了的,因为操作系统中并没有存在生成证书的发行机构。不过,这并不 妨碍我们正常的使用证书。
java-keytool生成数字证书

Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)——只包含公钥ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写JDK中keytool常用命令:-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\文件名为“.keystore”)-alias 产生别名-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)-keyalg 指定密钥的算法(如RSA DSA(如果不指定默认采用DSA))-validity 指定创建的证书有效期多少天-keysize 指定密钥长度-storepass 指定密钥库的密码(获取keystore信息所需的密码)-keypass 指定别名条目的密码(私钥的密码)-dname 指定证书拥有者信息例如:"CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码"-list 显示密钥库中的证书信息keytool -list -v -keystore 指定keystore-storepass 密码-v 显示密钥库中的证书详细信息-export 将别名指定的证书导出到文件keytool -export -alias 需要导出的别名-keystore 指定keystore -file 指定导出的证书位置及证书名称-storepass 密码-file 参数指定导出到文件的文件名-delete 删除密钥库中某条目keytool -delete -alias 指定需删除的别-keystore 指定keystore -storepass 密码-printcert 查看导出的证书信息keytool -printcert -file yushan.crt-keypasswd 修改密钥库中指定条目口令keytool -keypasswd -alias 需修改的别名-keypass 旧密码-new 新密码-storepass keystore密码-keystore sage-storepasswd 修改keystore口令keytool -storepasswd -keystoree:\yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)-import 将已签名数字证书导入密钥库keytool -import -alias 指定导入条目的别名-keystore 指定keystore -file 需导入的证书下面是各选项的缺省值。
跟我学Java安全技术及应用——如何创建数字证书文件

1.1跟我学Java安全技术及应用——如何创建数字证书文件1.1.1根据证书库文件导出生成安全证书文件1、安全证书文件的格式目前数字证书的格式普遍采用的是X.509V3国际标准【是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sign-on)和授权管理基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准。
】,作为文件形式存在的证书一般有如下的这几种格式。
其中只有pfx格式的数字证书是包含有私钥的,而cer格式的数字证书里面只有公钥(可以对外公开的,不用加密)没有私钥。
因此,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。
(1)带有私钥的证书由Public Key Cryptography Standards #12(PKCS#12)标准定义,包含了公钥和私钥的二进制格式的证书形式,并以pfx作为证书文件后缀名。
(2)二进制编码的证书证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。
(3)Base64编码的证书文件中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。
2、JDK中的keytool命令程序Keytool为Java 系统库JDK中的一个命令程序,Keytool 是用于管理密钥和证书的工具,使用户和管理员能管理自己的公/私钥对以及相关的证书。
3、导出生成安全证书文件的命令和创建过程(1)在操作系统的命令行窗口中输入如下的命令keytool -export -alias yangSB -file F:/server.cer -keystore f:/server.keystore -validity 365将出现如下的示图:上面的命令的主要功能将实现把位于目录文件中的数字证书库f:/server.keystore中的别名为“yangSB”的证书导出到F:/server.cer的数字证书文件中。
如何利用java程序实现加密所需的公钥、密钥、数字证书

如何利⽤java程序实现加密所需的公钥、密钥、数字证书本篇的主要⽬的在于实现pdf的数字签名问题,只是作为我学习知识的总结。
1、数字签名算法的概述数字签名:私钥⽤于签名,公钥⽤于验证。
数字签名的作⽤:验证数据的完整性,认证数据来源,抗否认。
数字签名实现的具体原理:1、将报⽂按双⽅约定的HASH算法计算得到⼀个固定位数的报⽂摘要。
在数学上保证,只要改动报⽂中任何⼀位,重新计算出的报⽂摘要值就会与原先的值不相符。
这样就保证了报⽂的不可更改性。
(详见参考资料的"公钥密码技术原理"章节)2、将该报⽂摘要值⽤发送者的私⼈密钥加密,然后连同原报⽂和数字证书(包含公钥)⼀起发送给接收者⽽产⽣的报⽂即称数字签名。
3、接收⽅收到数字签名后,⽤同样的HASH算法对报⽂计算摘要值,然后与⽤发送者的公开密钥进⾏解密解开的报⽂摘要值相⽐较,如相等则说明报⽂确实来⾃所称的发送者。
4、同时通过证书颁发机构CA确认证书的有效性即可确认发送的真实⾝份。
常⽤的数字签名有:RSA、DSA、ECDSA2、RSA算法概述RSA是⽬前为⽌应⽤最为⼴泛的⾮对称加密算法。
⾮对称加密算法简单的说就是分成公钥和私钥。
加密和解密采⽤不同的算法实现,这样的好处是不需要像传统对称加密算法⼀样将相同算法的密钥分发给对⽅,从⽽减少密钥被获取所带来的严重危害,⽬前基本上都是采⽤⾮对称算法,⽽RSA是最为⼴泛的。
理论上1024位以上的RSA是⽆法破解的(或者未公开)。
基本原理:⾮对称算法将密码将密码分为公钥和私钥,公钥发送给⽤户(可以是多个),⽤户⽤公钥加密想要发送的数据,然后发送给服务器,服务器通过私钥解密加密后的数据。
基本步骤:⽣成公钥和私钥步骤:1. 随机选择两个不相等的质数p和q2. 计算p和q的乘积n (n的长度就是密钥长度。
3233写成⼆进制是110010100001,⼀共有12位,所以这个密钥就是12位。
实际应⽤中,RSA密钥⼀般是1024位,重要场合则为2048位。
java certificate工具类

java certificate工具类Java Certificate工具类是Java编程中常用的一个类库,用于处理与数字证书相关的操作。
数字证书在网络通信和信息安全领域起着重要的作用,通过使用Java Certificate工具类,我们可以方便地生成、解析、验证和管理数字证书。
本文将介绍Java Certificate工具类的基本使用方法及其在实际开发中的应用。
一、Java Certificate工具类概述Java Certificate工具类是Java提供的一个用于处理数字证书的类库,主要包括以下几个方面的功能:1. 数字证书的生成:Java Certificate工具类提供了生成数字证书的方法,可以生成包含公钥、私钥、证书有效期等信息的数字证书。
2. 数字证书的解析:Java Certificate工具类可以解析数字证书的各个字段,包括证书的颁发者、持有者、有效期、证书类型等信息。
3. 数字证书的验证:Java Certificate工具类支持对数字证书的有效性进行验证,包括验证证书的数字签名、证书是否过期等。
4. 数字证书的管理:Java Certificate工具类可以用于管理数字证书,包括导入、导出、删除证书等操作。
二、Java Certificate工具类的基本使用方法1. 生成数字证书使用Java Certificate工具类生成数字证书的基本步骤如下:(1)创建数字证书生成器对象。
(2)设置证书的有效期、持有者等信息。
(3)生成证书的公钥和私钥对。
(4)将公钥和证书信息传入数字证书生成器。
(5)调用生成方法生成数字证书。
2. 解析数字证书使用Java Certificate工具类解析数字证书的基本步骤如下:(1)创建数字证书解析器对象。
(2)通过输入流读取证书文件。
(3)调用解析方法解析数字证书。
(4)获取数字证书的各个字段信息,如颁发者、持有者、有效期等。
3. 验证数字证书使用Java Certificate工具类验证数字证书的基本步骤如下:(1)创建数字证书验证器对象。
JAVA对于数字证书的常用操作方法

System.out.println("签发者:"+t.getIssuerDN());
System.out.println("有效期:"+t.getNotBefore());
System.out.println("签名算法:"+t.getSigAlgName());
byt/签名值
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果
(9)设置新证书签名算法信息
ks.store(output,storepass.toCharArray())将keystore对象内容写入新文件
八:JAVA程序检验别名和删除条目
FileInputStream in=new FileInputStream(".keystore");
KeyStore ks=KeyStore.getInstance("JKS");
PublicKey pk=t.getPublicKey();
byte [] pkenc=pk.getEncoded();
System.out.println("公钥");
for(int i=0;i
五:JAVA程序列出密钥库所有条目
String pass="123456";
CertificateFactory cf=CertificateFactory.getInstance("X.509");
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
@SuppressWarnings("all") public class BaseCert {
1950-2049; ▪ 证书所有人的名称,命名规则一般采用 X.500 格式; ▪ 证书所有人的公开密钥; ▪ 证书发行者对证书的签名。
作为文件形式存在的证书一般有这几种格式:
带有私钥的证书由 Public Key Cryptography Standards #12,PKCS#12 标准定义, 包含了公钥和私钥的二进制格式的证书形式,以 pfx 作为证书文件后缀名。
8) 指纹及指纹算法(Thumbprint、Thumbprint algorithm) 指纹以及指纹算法,在证书发布的时候,发布机构会根据指纹算法先计算出整个证书的 hash 值,并使用证书发布机构的私钥对其进行签名构成一个指纹,并将指纹与该证书放在 一起。
在生成证书的时候,需要自己设定颁发者、有效期、使用者等等。版本、签名算法、以 及证书公钥等都是要设定的,否则生成的证书是无法正常使用的。
2. 详细信息
1) 版本(Version) 很明显,这个是证书的版本号,不同版本的证书格式是不同的。这里,我用的是 V3 版 本。 2) 序列号(Serial Number)
证书序列号,同一身份验证机构签发的证书序列号是唯一的。 3) 签名算法(Signature algorithm) 签名算法,指的是这个数字证书中的数字签名所使用的加密算法,可以通过根证书中的 公钥对这个证书中的指纹进行解密。 4) 颁发者(Issuer) 证书发布机构,指出这个证书是哪个公司创建的,这是哪个 CA 中心的证书。当然, 如果是你自己公司生成的证书,那么颁发者就是你自己的公司了。 5) 有效期(Valid from to) 证书的生成日期,以及证书使用的截至日期。证书有效期失效之后,在认证服务器中会 进行校验,校验失败后,重新生成新证书或者是其他的操作。这个依据证书的发布机构而定。 6) 使用者(Subject) 这个证书是发布给谁的,或者说是证书的所有者,一般是某个人或者某个公司的名称、 机构的名称、公司网站的网址等。当然,如果是根证书的话,那么,使用者就是自己的公司 了。 7) 公钥(Public key) 证书的公钥,主要是用来对消息进行加密的,这个证书的公钥是 2048 位的,他的值 可以在对话框中看到,是很长的一段十六进制数。
用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构 发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您 自己的数字证书。
5. 工作原理
数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设 定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共 密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。
}
BaseCert (证书类)
import com.cacss.jsceu.context.CAConfig; import com.cacss.jsceu.util.CertUtil; import com.cacss.jsceu.util.DateUtil; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.x509.X509V3CertificateGenerator;
保密性,即相当于生成一个复杂的密码。 数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不
同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核 签发的电子数据,可以更加方便灵活地运用在电子商务和电子政务中。
4. 颁发
数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份 信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由 用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和 他的公钥信息,同时还附有认证中心的签名信息。
(三) 生成数字证书
前两篇把基本的概念和构成都大致的说了一下,今天这篇文章,主要是讲一下,如何使
用 Java 代码生成 CA 证书,以及在生成证书的时候,需要设置的一些属性。
这里使用的是 Java 的 api ,以及第三方的一个组件 —— BC,(Bouncy Castle)。
稍微介绍一下 BC,Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包。
1. 概要
这篇文章,我主要是想谈一下 CA 证书的工作原理,数字签名,证书格式等几个比较 重要的概念。因为须要弄懂的。
2. 什么是数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在 Internet 上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份 证。它是由一个由权威机构 —— CA 机构,又称为证书授权(Certificate Authority) 中心发行的,人们可以在网上用它来识别对方的身份。
(一) 了解数字证书
最近的工作一直围绕着数字证书,对于 CA 证书的了解还是多少有一点的,只不过没 有那么深入,现在要用到这方面的东西,显然还是有点欠缺,那么从这篇开始,我就将我自 己的学习、工作历程跟大家一同分享,希望对想了解 CA 证书的童鞋有所帮助吧。
很显然,这篇文章大部分都是理论介绍,后续会有相关的一些实例。不喜欢看理论的童 鞋,可以直接略过此章,直接看后续的文章。
二进制编码的证书中没有私钥,DER 编码二进制格式的证书文件,以 cer 作为证书文 件后缀名。
Base64 编码的证书证书中没有私钥,BASE64 编码格式的证书文件,也是以 cer 作 为证书文件后缀名。
由此可看出,只有 pfx 格式的数字证书是包含有私钥的,cer 格式的数字证书里面只 有公钥没有私钥。当然,我们经常使用的数字证书就是 cer 格式的,比如,12306 颁发的 数字证书,就是这种格式的,购票之前,需要在自己的电脑上安装证书,以确保我们的客户 端可以与正确的服务器进行通信。
用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别 人无法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点:
▪ 保证信息是由签名者自己签名发送的,签名者不能否认或难以否认。 ▪ 保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。 将报文按双方约定的 HASH 算法计算得到一个固定位数的报文摘要。在数学上保证: 只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了 报文的不可更改性。 将该报文摘要值用发送者的私人密钥加密(对明文进行解密完全没问题,会得出一个不 可读的“明文”),然后连同原报文一起发送给接收者,而“加密”后的报文即称数字签名。 接收方收到数字签名后,用同样的 HASH 算法对原报文计算出报文摘要值,然后与用 发送者的公开密钥对数字签名进行解密(原先已经把签名加密了,现在再解密就能还原)得 到的报文摘要值相比较。如相等则说明报文确实来自所称的发送者。 由于只有拥有私钥的签名者能通过“解密”摘要生成签名,因此具有安全和不可抵赖性。 那为什么是对报文摘要进行加密,而不是对原报文进行加密呢?这是因为 RSA 加解密 非常耗时,被加密的报文越大,耗得时间越多,因此聪明的人类对其摘要进行加密,(因为 报文摘要是要比原报文小得多),仍然能够起到同样的作用。这是为什么多了个报文摘要。
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的 文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有 一个重要的特征就是只在特定的时间段内有效。
3. 原理
数字证书里存有很多数字和英文,当使用数字证书进行身份认证时,它将随机生成 128 位的身份码,每份数字证书都能生成相应但每次都不可能相同的数码,从而保证数据传输的
7. 证书格式
目前数字证书的格式普遍采用的是 X.509V3 国际标准,一个标准的 X.509 数字证书包 含以下一些内容:
▪ 证书的版本信息; ▪ 证书的序列号,每个证书都有一个唯一的证书序列号; ▪ 证书所使用的签名算法; ▪ 证书的发行机构名称,命名规则一般采用 X.500 格式; ▪ 证书的有效期,现在通用的证书一般采用 UTC 时间格式,它的计时范围为
它支持大量的密码术算法,并提供 JCE 1.2.1 的实现。而我们将要使用的就是非常常用的
非对称算法 RSA 加密算法。
下面我们来看一下具体的代码。
CAConfig (配置接口)
public interface CAConfig { String CA_C = "CN"; String CA_ST = "BJ"; String CA_L = "BJ"; String CA_O = "SICCA"; String CA_ROOT_ISSUER="C=CN,ST=BJ,L=BJ,O=SICCA,OU=SC,CN=SICCA"; String CA_DEFAULT_SUBJECT="C=CN,ST=BJ,L=BJ,O=SICCA,OU=SC,CN="; String CA_SHA="SHA256WithRSAEncryption";
当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的 私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个 不可逆过程,即只有用私有密钥才能解密。