开篇:润墨网以专业的文秘视角,为您筛选了一篇企业公文流转中数字签名的设计及实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:办公自动化已渗透到企业管理中,与此同时,信息安全性也显得尤为重要。由于计算机网络的开放性的特点,公文流转过程中的安全性、真实性和防抵赖性就显得尤为重要了,在此研究领域中Java安全技术逐渐显示出诸多的优势,成为主流技术了。该课题针对公文流转过程中存在的安全漏洞提出了基于Java安全技术下的数字签名解决方案的框架,实践证明该框架具有很高的可行性。
关键词:公文流转;Java;安全API;数字签名
中图分类号:TP309 文献标识码:A 文章编号:1009-3044(2008)35-2532-02
The Design and Implement of the Digital Ignature about Enterprises OA Document-trasferring
YAN Guang-ping
(Qilu Petrochemical Company,Zibo 255411,China)
Abstract: OA has entered into the common management of enterprises. at the same time, the importance of information security has been well known. Due to the opening characteristic of Internet, security, authenticity and prevent-deny have become more and more important. In this research field of security, The Java security technology has appeared more and more advantages and has become the mainstream. In this dissertation, the frame of resolving plans about digital signature based on Java security technology are pointed out, The plans can make up the leaks exist in the course of document-transferring in the office automation system. It proved by practice that the frame has high feasibility.
Key words: document transferring; Java; security API; digital signature
1 引言
目前,大多数企业在公文流转子系统的文件收发管理中,收发文档传递的是两种形式的文本:公文正文(纯文本)和附件(正规文档),部门之间简单的通知和消息以正文文本的形式传递,而正规的文档则以附件的形式传递,由于涉及到企业的一些生产措施、内部政策文件甚至经济效益等,其文件的保密性要求比较高,采用简单的消息摘要不能满足需求,必须对其进行数字签名,保证信息的完整、不可抵赖以及安全性。为此,该文就办公自动化公文流转子系统的数字签名的设计与实现进行探讨。
2 数字签名基本过程
一般来讲,数字签名过程如图1所示,即首先计算被签名文件的MD5码或者SHA-1码(java2程序缺省计算SHA-1码),该码经DSA私有密钥和DSA加密算法加密后,形成数字签名,然后附加到原文件中去,合并为可以向外发送的传输文件。收件人得到带有数字签名的传输文件后,要对数字签名进行鉴别。首先,取出签名者的公有密钥,数字签名经过公有密钥和DSA解密算法解密后,恢复出原来的MD5码,再与前者比较,如果相同,则文件属实,否则文件或签名被修改。
可以通过2种方案实现数字签名:一是利用java自带的相关工具实现;二是使用java.security API编写类来实现。
以下,主要就用jdk1.2中的java.security.API构造类实现数字签名进行分析。
3 用jdk1.2中的java.security.API构造类实现数字签名
3.1 产生公钥、私钥对
得到密钥产生器: KeyPairGenerator KeyGen= KeyPairGenerator. getInstance (“DSA”, ”SUN”);
初始化密钥产生器:SecureRandom random= SecureRandom. getInstance (“MD5”,random);
产生公钥和私钥:KeyPair pair=KeyGen.generateKeyPair();
PrivateKey priv=pair.getPrivate();
PublicKey pub=pair.getPublic();
密钥是由随机数产生器产生的,在java中具体就是通过类KeyPairGenerator来生成的。生成一个“DSA”算法的密钥对,长度为1024 bit,具体过程如下:
1) 创建密钥对生成器首先生成一个KeyPairGenerator类的对象,成为密钥对象:KeyPairGenerator KeyGen= KeyPairGenerator.getInstance(“DSA”);
2) 初始化密钥对生成器KeyPairGenerator类中的initialize方法中的两个参数:强度strength和随机数源sourceofrandomness,将强度设置为1024,以生成1024位的密钥对。将随机数源设为内SecureRandom的一个实例,它将自动生成随机数生成器运作说需要的一个seed值:
KeyGen.initialize(1024,new SecureRandom());
3) 生成密钥对,将生成的密钥对保存在KeyPair类的一个实例中:
KeyPair pair=KeyGen.GenerateKeyPair();
3.2 对数据签名
得到一个签名对象:
Signature dsa= Signature.getInstance(“SHA1withDSA”, ”SUN”);
初始化签名对象:dsa.initSign(priv);
对数据签名:das.update(buffer,0,len);
得到签名的数据:byte[] realSig=dsa.sign()。
使用签名类Signature来生成数字签名。过程如下:
1) 得到一个签名对象
使用DSA算法以及相应的SHA-1信息融合算法来得到一个生成和验证签名的签名对象:Signature dsa= Signature.getInstance(“SHA/DSA”);
2) 初始化签名对象,签名对象用于签名或验证以前必须进行初始化,而这又需要用到前一步中生成的私有密钥:
PrivateKey priv=pair.getPrivate();dsa.initSign(priv);