欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > OFD板式文件创建JAVA工具-EASYOFD 七、 电子签章及验签 Seal

OFD板式文件创建JAVA工具-EASYOFD 七、 电子签章及验签 Seal

2025/2/24 16:41:11 来源:https://blog.csdn.net/likewindy/article/details/141096903  浏览:    关键词:OFD板式文件创建JAVA工具-EASYOFD 七、 电子签章及验签 Seal

     JAVA版本的OFD板式文件创建工具easyofd.
     功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签,电子签章及验签。
     本JAVA版本的easyofd使用原生方式创建板式文件,不依赖JAVA的SWT库。

     项目地址:http://wiki.easyofd.cn/zh/JAVA
     浏览器查看OFD文件控件地址: http://www.easyofd.cn

     代码地址:https://github.com/11627685/easyofd-java

一、电子印章

1.1 使用easyofd制作电子印章

  这属于测试性质的电子印章。正式环境应是政府颁发的电子印章。
  制作电子印章主要包含以下几个步骤:

  1. 制作数字证书
  2. 获取印章图片
  3. 补充签章位置等其他属性
  4. 保存电子印章
      代码如下:
//第一步 创建电子印章证书GMX509Builder gmx509Builder= null;try {gmx509Builder = getCertificate();} catch (Exception e) {e.printStackTrace();}X509Certificate certificate= gmx509Builder.getCertificate();System.out.println(certificate.toString());BCECPrivateKey bcecPrivateKey=(BCECPrivateKey) gmx509Builder.getPrivateKey() ;//第二步   电子印章的图片File file = new File("image/123.png");byte[] picdata= Util.getFileBytes(file);DEROctetString    data=  new   DEROctetString (picdata);DEROctetString  cert=   new  DEROctetString (certificate.getEncoded());//第三步   补充签章位置等其他属性SESeal seSeal= SealBuilder.getInstance("00001",5,"easyOFD电子印章",bcecPrivateKey,"png",data,40,30,null,cert);//第四步   保存电子印章String filePath1 = "XML/seal/seal-out.esl";SaveSealFile(filePath1,seSeal);
//第五步   保存秘钥String filePath2 = "XML/seal/seal-key.esl";SaveSealKeyFile(filePath2,bcecPrivateKey);

Copy

二、电子签章

//第一步 获取电子印章证书String sealPath = "XML/seal/seal-out.esl";SESeal seSeal=Util.getSealFromFile(sealPath);//第二步 获取私钥文件String keyPath = "XML/seal/seal-key.esl";BCECPrivateKey bcecPrivateKey=(BCECPrivateKey) getPrivateKey(keyPath)   ;//第三分 对签名范围内文件进行电子签章String filePath1 = "XML/image/image.ofd";String filePath2 = "XML/seal/image-seal.ofd";CTBoundary ctBoundary=new CTBoundary(10,10,40,30);OFDSealFile ofdSealFile=new OFDSealFile( new File(filePath1),seSeal);try {ofdSealFile.seal(bcecPrivateKey,ctBoundary);try {OutputStream os = null;os = new FileOutputStream(filePath2);ofdSealFile.saveOFD(os);if(os!=null){os.flush();os.close();}} catch (Exception e) {e.printStackTrace();}} catch (JAXBException e) {e.printStackTrace();}

Copy

三、电子签章验证

  验签是很简单的过程,只要把需要验签的文件传递给OFDVerifySignature类,调用verifySignature方法即可,只有该方法返回是true的情况才属于验签通过。

目前该版本程序验签只负责核对签名文件是否被修改进行验证,不会对证书的有效性,证书链,是否被吊销,是否过期等进行检核。

// 对OFD文件签章验证
public void VerFapiaoSeal() throws IOException, CryptoException, CertificateEncodingException, NoSuchProviderException, InvalidKeySpecException {boolean sucessed=false;try {String filePath = "XML/seal/fapiao.ofd"; // ASN.1文件路径Security.addProvider(new BouncyCastleProvider());OFDVerifySignature ofdVerifySignature =new OFDVerifySignature(new File(filePath));ofdVerifySignature.setSealCheck(this::sealCheck);boolean verifySignature = ofdVerifySignature.verifySignature();System.out.println("aaaaaa:"+verifySignature);}catch (Exception ex) {Assert.fail(ex.getMessage());}sucessed=true;assertEquals(true,sucessed  ) ;}//你自己的签章验证程序
@Override
public boolean sealCheck(SES_Signature sesSignature) {System.out.println("your seal check");return true;
}

Copy

不过你可以实现ISealCheck接口来定义你自己的检核程序。SES_Signature,包含了签名的值详细内容见 电子签章技术规范 GB/T 38540

四、easyofd电子签章后效果

seal-1.png

seal-2.png

seal-3.png

seal-4.png

seal-5.png

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词