数字签名系统的设计与实现+流程图(4)
时间:2017-02-27 13:19 来源:毕业论文 作者:毕业论文 点击:次
图2 写入签名 (3)在数据接收端对数据进行校验数据签名 通过FileInputStream文件流和ObjectInputStream对象分别读入文件、密钥、签名。通过Signature类使用getInstance工厂方法构造DSA算法Signature对象,通过initVerify()方法使用公钥初始化Signature对象。然后使用update()方法签名的文件进行解密操作,最后使用verify()方法验证解密后的代码和消息摘要是否一致。 图3 签名验证 4.3 数字签名系统的流程图 根据系统的操作流程,大致可以把系统分为如下结构: 图4 数字签名系统流程图 5.数字签名系统的实现 设计了公私密钥对生成模块,数据签名模块,数据校验模块,针对三个模块中用到的技术,做一下详细的阐述。 5.1 公私密钥对生成模块 生成密钥对可用java提供的类KeyPairGenerator,用其中的getInstance方法创建KeypairGenerator对象,在用initialize进行初始化,最后用generateKeyPair生成密钥对,密钥对生成后,就可以将其写入文件中。通过网络或其他方式公告用户,用户接收到数据文件和签名文件后,就可以使用公约来校验数据文件的数字签名。 直接使用import java.security.KeyPairGenerator导入包用于生成公私密钥对。 FileOutputStream fos_public=new FileOutputStream(“public.key”); ObjectOutputStream oos_public=new ObjectOutputStream(fos_public); FileOutputStream fos_private=new FileoutputStream(“private.key”); ObjectOutputStream oos_private=new ObjectOutputStream(fos_private); KeyPairGenerator 在公私密钥生成模块中使用KeyPairGenerator获取DSA算法: keyGen=KeyPairGenerator.getInstance(“DSA”); 对DSA的实例进行初始化: keyGen.initialize(1024); 使用非对称密钥加密DSA的实例获取公钥和私钥对: KeyPair key=keyGen.generateKeyPair(); 从生成的公私钥对中获取公钥: PublicKey publicKey=key.getPublic(); 从生成的公私钥对中获取私钥: PrivateKey privateKey=key.getPrivate(); 进行相应的关闭: oos_public.writeObject(publicKey); oos_private.writeObjecr(privatekey); fos_public.close(); oos_public.close(); fos_private.close(); oos_private.close(); 提示生成密钥对: System.out.println(“密钥对生成!”); 5.2 数据签名模块 导入包import java.io.File用于创建文件对象file_info,引入文档info.txt将要加密内容写入文档。 读入info.txt将文件对象file_info放入文件流fis_info中,根据创建的文件对象file_info统计出文件中的字符数创建byte数组,读入byte数组到内存中。 File file_info=new File(“info_txt”); FileInputStream fis_info=new FileInputStream(file_info); Int fileInfoLength=(int)file_info.length(); byte[] infoBytes=new byte[fileInfoLength]; fis_info.read(infoBytes); fis_info.close(); 读入私钥,创建文件对象fis_private,同时将文件对象fis_private放入对象流ois_private中,根据对象流读入私钥放入新创建的对象privateKey中。 FileInputStream fis_private=new FileInputStream(“private.key”); ObjectInputStream ois_private=new ObjectInputStream(fis_private); PrivateKey orivateKey=(PrivateKey) ois_private.readObject(); fis_private.close(); ois_private.close(); 生成签名,导入类Signature用于提供数字签名算法DSA: (责任编辑:qin) |