「java用户文件签名」java个性签名

博主:adminadmin 2022-11-21 14:47:05 121

今天给各位分享java用户文件签名的知识,其中也会对java个性签名进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 怎么验证文件为数字签名认证文件

1)从密钥库中读取CA的证书

FileInputStream in=new FileInputStream(".keystore");

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,storepass.toCharArray());

java.security.cert.Certificate c1=ks.getCertificate("caroot");

(2)从密钥库中读取CA的私钥

PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass.toCharArray());

(3)从CA的证书中提取签发者的信息

byte[] encod1=c1.getEncoded(); 提取CA证书的编码

X509CertImpl cimp1=new X509CertImpl(encod1); 用该编码创建X509CertImpl类型对象

X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象

X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 获取X509Name类型的签发者信息

(4)获取待签发的证书

CertificateFactory cf=CertificateFactory.getInstance("X.509");

FileInputStream in2=new FileInputStream("user.csr");

java.security.cert.Certificate c2=cf.generateCertificate(in);

(5)从待签发的证书中提取证书信息

byte [] encod2=c2.getEncoded();

X509CertImpl cimp2=new X509CertImpl(encod2); 用该编码创建X509CertImpl类型对象

X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象

(6)设置新证书有效期

Date begindate=new Date(); 获取当前时间

Date enddate=new Date(begindate.getTime()+3000*24*60*60*1000L); 有效期为3000天

CertificateValidity cv=new CertificateValidity(begindate,enddate); 创建对象

cinfo2.set(X509CertInfo.VALIDITY,cv); 设置有效期

(7)设置新证书序列号

int sn=(int)(begindate.getTime()/1000); 以当前时间为序列号

CertificateSerialNumber csn=new CertificateSerialNumber(sn);

cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);

(8)设置新证书签发者

cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果

(9)设置新证书签名算法信息

AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);

cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);

(10)创建证书并使用CA的私钥对其签名

X509CertImpl newcert=new X509CertImpl(cinfo2);

newcert.sign(caprk,"MD5WithRSA"); 使用CA私钥对其签名

(11)将新证书写入密钥库

ks.setCertificateEntry("lf_signed",newcert);

FileOutputStream out=new FileOutputStream("newstore");

ks.store(out,"newpass".toCharArray()); 这里是写入了新的密钥库,也可以使用第七条来增加条目

如何给Java程序加签名?

需要联网或者读取编辑本地文件的java软件、

在每次联网或者读取编辑文件的时候都会弹出询问用户是否允许、

这个权限可以设置成“每次询问”、“仅第一次询问”、“始终不允许”、“始终允许”、

没有签名的java软件、是不可以设置为“始终允许”的、

java软件签名版可以设置“始终允许”、避免每次询问的麻烦、

具体例子可见手机QQ下载频道、java版、有“诺基亚用户可下载签名版、获得更佳体验”、谢谢,望采纳。

java如何对pdf文件实现数字签名

用Spire.Doc  for Java 可以添加及验证数字签名,参考代码:

import com.spire.pdf.*;

 import com.spire.pdf.graphics.PdfImage;

 import com.spire.pdf.graphics.PdfTrueTypeFont;

 import com.spire.pdf.security.GraphicMode;

 import com.spire.pdf.security.PdfCertificate;

 import com.spire.pdf.security.PdfCertificationFlags;

 import com.spire.pdf.security.PdfSignature;

 

 import java.awt.*;

 import java.awt.geom.Point2D;

 import java.awt.geom.Rectangle2D;

 

 public class AddCertificate {

     public static void main(String[]args){

         //加载PDF文档

         PdfDocument doc = new PdfDocument();

         doc.loadFromFile("test.pdf");

 

         //加载pfx证书,及证书秘钥

         PdfCertificate cert = new PdfCertificate("Cermia.pfx","123654yes!");

 

         //添加数字签名到指定页面,并设置其位置和大小

         PdfSignature signature = new PdfSignature(doc, doc.getPages().get(2), cert, "MySignature");

         Rectangle2D rect = new Rectangle2D.Float();

         rect.setFrame(new Point2D.Float((float) doc.getPages().get(0).getActualSize().getWidth() - 340, (float) doc.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 150));

         signature.setBounds(rect);

 

         //设置签名为图片加文本模式

         signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);

 

         //设置签名的内容

         signature.setNameLabel("签字者:");

         signature.setName("Mia");

         signature.setContactInfoLabel("联系电话:");

         signature.setContactInfo("02881705109");

         signature.setDateLabel("日期:");

         signature.setDate(new java.util.Date());

         signature.setLocationInfoLabel("地点:");

         signature.setLocationInfo("成都");

         signature.setReasonLabel("原因:");

         signature.setReason("文档所有者");

         signature.setDistinguishedNameLabel("DN: ");

         signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());

         signature.setSignImageSource(PdfImage.fromFile("sign.png"));

 

         //设置签名的字体

         signature.setSignDetailsFont(new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 9)));

 

         //设置文档权限为禁止更改

         signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);

         signature.setCertificated(true);

 

         //保存文档

         doc.saveToFile("AddSignature.pdf");

         doc.close();

     }

 }

数字签名添加效果:

数字签名效果

参考原文

「java用户文件签名」java个性签名

java用户文件签名的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java个性签名、java用户文件签名的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。