当前位置: 首页 > news >正文

网站建设课程教学计划商机网项目

网站建设课程教学计划,商机网项目,建设厅官方网站下载专区,简历在线制作网站免费以下代码详细说明如何使用数字证书对PDF电子文件进行数字签名/盖章。PDF文件签署主要传递PDF文件#xff0c;数字证书信息#xff0c;签章图片3个信息。代码中需要的文件、数字证书、签章图片可访问开放签电子签章开源系统详细了解系统的实现与效果。也可通过gitee开源社区下…以下代码详细说明如何使用数字证书对PDF电子文件进行数字签名/盖章。PDF文件签署主要传递PDF文件数字证书信息签章图片3个信息。代码中需要的文件、数字证书、签章图片可访问开放签电子签章开源系统详细了解系统的实现与效果。也可通过gitee开源社区下载开放签开源电子签章系统获取所有开源代码。 1、数字签名/盖章类SignService.java import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfSignatureAppearance; import com.itextpdf.text.pdf.PdfStamper; import com.itextpdf.text.pdf.security.*; import com.resrun.service.pojo.CertificateProperty; import com.resrun.service.pojo.RealPositionProperty; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.springframework.stereotype.Service;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.PrivateKey; import java.security.Security; import java.security.cert.Certificate;/*** Description: 签署业务* Package: com.resrun.service.pdf* ClassName: SignService* copyright 北京资源律动科技有限公司 www.kaifangqian.com*/ Service public class SignService {public byte[] signingContract(byte[] pdfFile, byte[] signBadge, CertificateProperty cert,RealPositionProperty position) throws GeneralSecurityException, IOException, DocumentException {System.setProperty(javax.xml.parsers.DocumentBuilderFactory,com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl);Security.addProvider(new BouncyCastleProvider());//1、解析证书// Java 安全属性文件中指定的默认 keystore 类型如果不存在此类属性则返回字符串 jks。 PKCS12KeyStore ks KeyStore.getInstance(cert.getCertType());try {char[] chars cert.getPassword().toCharArray();ByteArrayInputStream byteArrayInputStream new ByteArrayInputStream(cert.getCertFile());ks.load(byteArrayInputStream, chars);} catch (Exception e) {e.printStackTrace();}// 获取keystore中的所有别名String alias (String) ks.aliases().nextElement();// 返回请求的密钥 入力参数别名用于恢复密钥的密码PrivateKey pk (PrivateKey) ks.getKey(alias, cert.getPassword().toCharArray());// 证书链按用户证书在前根证书授权在后的顺序Certificate[] chain ks.getCertificateChain(alias);byte[] signedFileByte null ;PdfReader reader null ;ByteArrayOutputStream signedFile null ;PdfStamper stamper null ;try {//2、读取PDF文件reader new PdfReader(pdfFile);signedFile new ByteArrayOutputStream();stamper PdfStamper.createSignature(reader, signedFile, \0, null, true);//3、给签署属性服务PdfSignatureAppearance appearance stamper.getSignatureAppearance();if (signBadge null || position null) {appearance.setCertificationLevel(certificationLevel);} else {int pageNum 0;if (inspect) {//如果检查就会抛出检查异常pageNum position.getPageNum();if (pageNum 0)throw new IllegalArgumentException(Pdf page number must be greater than one....!!!);} else {pageNum position.getPageNum() 0 ? 1 : position.getPageNum();}appearance.setVisibleSignature(new Rectangle(position.getStartx(), position.getStarty(), position.getEndx(), position.getEndy()), pageNum, null);// 添加签章图片Image img Image.getInstance(signBadge);appearance.setSignatureGraphic(img);appearance.setImageScale(-1);appearance.setCertificationLevel(certificationLevel);appearance.setRenderingMode(renderingMode);}appearance.setReason(reason);appearance.setLocation(location);//4、调用签署 Creating the signatureExternalSignature pks new PrivateKeySignature(pk, hashAlgorithm, BouncyCastleProvider.PROVIDER_NAME);ExternalDigest digest new BouncyCastleDigest();MakeSignature.signDetached(appearance, digest, pks, chain, null, ocspClient, tsaClient, 0, cryptoStandard);signedFileByte signedFile.toByteArray();} catch (Exception e){e.printStackTrace();}finally {// 关闭流if (stamper ! null) stamper.close();if (signedFile ! null) signedFile.close();if (reader ! null) reader.close();}return signedFileByte ;}//是否判断校验不校验PDF页码private boolean inspect true;private int certificationLevel PdfSignatureAppearance.NOT_CERTIFIED;private PdfSignatureAppearance.RenderingMode renderingMode PdfSignatureAppearance.RenderingMode.GRAPHIC;private String hashAlgorithm DigestAlgorithms.SHA256;private MakeSignature.CryptoStandard cryptoStandard MakeSignature.CryptoStandard.CMS;private String reason 防伪造防篡改数字校验; //原因private String location; //位置private TSAClient tsaClient; //时间戳服务private OcspClient ocspClient;public boolean isInspect() {return inspect;}public void setInspect(boolean inspect) {this.inspect inspect;}public int getCertificationLevel() {return certificationLevel;}public void setCertificationLevel(int certificationLevel) {this.certificationLevel certificationLevel;}public PdfSignatureAppearance.RenderingMode getRenderingMode() {return renderingMode;}public void setRenderingMode(PdfSignatureAppearance.RenderingMode renderingMode) {this.renderingMode renderingMode;}public String getHashAlgorithm() {return hashAlgorithm;}public void setHashAlgorithm(String hashAlgorithm) {this.hashAlgorithm hashAlgorithm;}public MakeSignature.CryptoStandard getCryptoStandard() {return cryptoStandard;}public void setCryptoStandard(MakeSignature.CryptoStandard cryptoStandard) {this.cryptoStandard cryptoStandard;}public String getReason() {return reason;}public void setReason(String reason) {this.reason reason;}public String getLocation() {return location;}public void setLocation(String location) {this.location location;}public TSAClient getTsaClient() {return tsaClient;}public void setTsaClient(TSAClient tsaClient) {this.tsaClient tsaClient;}public OcspClient getOcspClient() {return ocspClient;}public void setOcspClient(OcspClient ocspClient) {this.ocspClient ocspClient;}} 2、证书文件属性类主要存储证书信息CertificateProperty.java import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** Description: 证书文件属性类* Package: com.resrun.service.pojo* ClassName: CertificateProperty* copyright 北京资源律动科技有限公司*/ AllArgsConstructor NoArgsConstructor Data public class CertificateProperty implements Serializable {private static final long serialVersionUID -2073805779543816269L;private byte[] certFile;/** 证书的类型 比如PKCS12和jks*/private String certType;/** 证书密码 */private String password;} 3、签署位置信息类 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable;/*** Description: 经过计算后的文件签署位置属性类* Package: com.resrun.service.pojo* ClassName: PositionProperty* copyright 北京资源律动科技有限公司*/ AllArgsConstructor NoArgsConstructor Data public class RealPositionProperty implements Serializable {private static final long serialVersionUID 8586984409612483553L;/** 签章左下角x坐标 */private float startx;/** 签章左下角y坐标*/private float starty;/** 签章右上角x坐标*/private float endx;/** 签章右上角x坐标*/private float endy;private int pageNum;// 填写值填写专用private String value ;//对齐方式private String align ;//字体private String fontFamily ;//文字大小private Integer fontSize ; }
http://www.pierceye.com/news/400021/

相关文章:

  • 多城市网站建设免费制作小程序的平台
  • 郑州网站建设出名吗?wordpress获取登录密码
  • 网站建设论文的开题报告重庆市工程建设信息
  • 商务网站设计方案门户网站的优点
  • 河津网站制作wampserver做的网站
  • 洛阳专业网站设计开发制作建站公司零陵区住房和城乡建设局网站
  • 在哪里可以学做网站游戏开发大亨下载
  • 找人做ps的网站无锡 做公司网站
  • 云速建站可以建个人网站吗wordpress仿站难吗
  • 如何取外贸网站域名凡科h5制作教程
  • 蜘蛛不抓取网站的原因中山h5网站建设
  • 百度免费推广网站建网站用的免费软件
  • 网站建设西安哪里好广州做企业网站的公司
  • 汉中市网站建设爱墙 网站怎么做
  • 失物招领网站开发项目需求分析搭建外文网站
  • 免费网站空间免备案自学php做网站
  • 南宁网站建设nnit30郴州市第一职业中专
  • 想开个影视网站 那有做的莱芜信息平台
  • js做网站登录有服务器了怎么做网站
  • 郑州餐饮网站建设哪家好零基础网站建设教学在哪里
  • 讲述做网站的电影建设工程公司名字大全
  • 易语言可以做网站管理系统吗网站备案查询工信部手机版
  • 珠海建站论坛淘宝客网站做一种还是做好几种
  • 杭州公司的网站建设公司教育网站制作运营
  • 福州手游网站建设长春火车站停运了吗
  • wordpress仿站博客视频教程建筑模板哪种好
  • 手机配件网站模板雇主品牌建设
  • 列车营销网站怎么做网站 审批号
  • 嘉定公司网站设计游仙建设局官方网站
  • 青山做网站西安十大网站制作公司