java语言中什么是签名

Python086

java语言中什么是签名,第1张

签名一般是使用公私密钥对。自己使用私钥加密,其他人可以任意获取到公钥用来解密,既然解出来了,就说明是私钥加密的。 用私钥加密的过程叫做签名。

当然实际过程没这么简单,还包括,找个合适的第三方再次签名公钥已证明公钥的安全性等。不过只要知道上面的东西基本就可以了。

用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软件签名版可以设置“始终允许”、避免每次询问的麻烦、

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