「java电子签名」电子签章java

博主:adminadmin 2022-12-09 03:00:07 85

本篇文章给大家谈谈java电子签名,以及电子签章java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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怎么实现

import java.security.InvalidKeyException;

import java.security.Key;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.NoSuchAlgorithmException;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.SecureRandom;

import java.security.Signature;

import java.security.SignatureException;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

 * ECDSA 160bit 签名及签名验证例子

 */

public class ECDSASignature {

    public static void main(String argv[]) {

        signatureTest();

    }

    public static void signatureTest() {

        /**

         * 密钥对生成

         */

        KeyPairGenerator keyPairGenerator = null;

        try {

            keyPairGenerator = KeyPairGenerator.getInstance("EC");

        } catch (NoSuchAlgorithmException ex) {

            return;

        }

        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(160, secureRandom);

        KeyPair pair = keyPairGenerator.generateKeyPair();

        Key publicKey = pair.getPublic();

        Key privateKey = pair.getPrivate();

        // 字符串

        String hako = "test";

        /**

         * 私钥签名(ECDSA 160bit)

         */

        byte[] sign = null;

        try {

            Signature signatureSign = null;

            signatureSign = Signature.getInstance("NONEwithECDSA");

            signatureSign.initSign((PrivateKey) privateKey, secureRandom);

            signatureSign.update(hako.getBytes());

            sign = signatureSign.sign();

            System.out.println("sign: " + new String(sign));

        } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException ex) {

            Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE, null, ex);

        }

        /**

         * 用公钥进行签名验证

         */

        Signature signatureVerify = null;

        try {

            signatureVerify = Signature.getInstance("NONEwithECDSA");

            signatureVerify.initVerify((PublicKey) publicKey);

            signatureVerify.update(hako.getBytes());

            boolean verifyResult = signatureVerify.verify(sign);

            System.out.println(verifyResult ? "签名OK" : "签名NG");

        } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {

            Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE, null, e);

        }

    }

}

如何从java生成签名在AWS问题,怎么解决

Java2下Applet数字签名实现过程如下:

在代码的分发端:

(1)开发Java源程序并对其进行编译。

(2)用JAR工具对类文件和资源文件进行封装。

(3)用keytool创建公钥和密钥,生成X。509V1签名证书,输出证书。

(4)通过jarsigner工具用生成的密钥对JAR文件进行数字签名。

在代码的接收端:

(1)用keytool输入证书视其为可信任。

(2)用policytool创建和修改安全性策略配置文件,授权请求的访问权限。

(3)从网络取得字节码,用公钥验证数字签名证书和文档代码的完整性。

(4)验证字节码的合法性,根据策略文件分配相应权限。

(5)执行代码,完成后被垃圾回收器回收内存。

在用公钥验证数字签名证书之前,接收方需要确认公钥自身的可靠性,因此通常情况是提供一个包含公钥的证书而不是公钥自身。1个证书包括:

(1)1个公钥。

(2)1个唯一的名字实体(个人或公司),它是证书的所有者,包含用户名字、公司、组织、城市、地址、国家代码、省份等信息。

(3)数字签名:1个证书被1个分发者的实体签名,保证证书确实包含另1个实体(所有者)的公钥。

java中签名是什么意思

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

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

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

The End

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