图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:
上一篇:基于遗传算法的云计算任务调度研究
下一篇:基于.NET的师生在线交流平台的设计和实现

Android手机考勤平台的设计与实现

基于android的环境信息管理系统设计

java+mysql班级评优系统的设计实现

Python+mysql宠物领养平台的设计与实现

ASP.NET飞翔租贷汽车公司信...

基于激光超声检测金属材...

多频激励下典型非线性系统的振动特性研究

浅谈高校行政管理人员的...

压疮高危人群的标准化中...

酵母菌发酵生产天然香料...

上海居民的社会参与研究

基于Joomla平台的计算机学院网站设计与开发

STC89C52单片机NRF24L01的无线病房呼叫系统设计

提高教育质量,构建大學生...

浅论职工思想政治工作茬...

AES算法GPU协处理下分组加...

从政策角度谈黑龙江對俄...