知识大全 如何在java中编程实现数字签名系统
Posted 知
篇首语:盛年不重来,一日难再晨。及时当勉励,岁月不待人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何在java中编程实现数字签名系统相关的知识,希望对你有一定的参考价值。
生成密钥对 生成密钥对可用java提供的类KeyPairGenerator 用其中的getInstance方法创建KeypairGenerator对象 在用initialize进行初始化 最后用generateKeyPair生成密钥对 密钥对生成后 就可以将其写入文件中 通过网络或其他方式公告用户 用户接收到数据文件和签名文件后 就可以使用公约来校验数据文件的数字签名 判断数据在网络中的传输是否被非法修改 ////GenerateKeyPair java///////////// import java io *; import java security *; public class GenerateKeyPair public static void main(String[] args) boolean bHelp=false;//sign for show help FileOutputStream fileOut;//输出密钥到文件 byte[] pubkey;//存储已编码的公钥字节 byte[] privKey;//存储已编码的私钥字节 if(args length!= ) System out println( Usage:GenerateKeyPair <keyname>; System out println( Option: ); System out println( <keyname>:The key name that using to genera te filename ); System exit( ); try System out println( Generating a key pair ); KeyPairGenarator keyGen=KeyPairGenerator getInstance( DSA );//使用DSA算法 KeyGen initialize( new SecureRandom()); KeyPair pair=keyGen generateKeyPair(); PublicKey pub=pair getPublic(); PrivateKey priv=pair getPrivate(); pubkey=pub getEncoded(); privateKey= priv getEncoded(); fileOut=new FileOutputStream( PublicKey_ +args[ ]); fileOut write(pubKey); fileOut close(); fileOut=new FileOutputStream( privateKey_ +args[ ]): fileOut write(privateKey); file out close(); System out println( OK! ); catch(Exception e) 生成数字签名 从私钥文件读取数据文件并将其转换为PrivateKey对象 可以使用KeyFactory类和PKCS EncodeKeySpec类 KeyFactory可以利用给定的蜜月规范来建立不透明的密钥对象 也可以适当的格式取出蜜月对象中的密钥信息 Signature是个引擎类 提供了诸如DSA或是RSA with MD 这样的数字签名算法 密 码学上安全的签名算法可接受任意大小的输入和一个私月 并产生一个比较短的(常常是固定大小的)前名字揭穿 并且 签名和公钥部反映有关私钥的任何内容 Signature对象即可用于数据签名 也可用于校验某个签名是否为预制关联的数据的真实签名 签名或教研签名的第一步是创建signature实例 为特定类型的签名算法或取signature对象的途径是调用signature德getInstance静态方法 初始化方法有两个 取决于Signature的用途 initSign( )////用于签名 initVerify( )//用于校验 如果sigature初始化为签名 则可将带钱数据通过update方法提供给对象在调用sign来产生签名即可 下面以一个实例来说明 ///////////////////SignData java//////////////// import java io *; import java security *; import java security spec *; public class SignData public static void main(String [] args) FileOutputStream fileOut; byte b; if(args length!= ) System out println( Usage:SignData <PrivateKey> <dataFile> <SignatureFile> ); System out println( Option: ); System out println( <PrivateKey>:The file name of the private Key ); System out println( <DataFile>: The filename that want to signature ); System out println( <signatureFile>:the filename containing signture data ); try System out println( Generating a digital signature ); FileInputStream fileIn=new FileInputStream(args[ ]); byte[] encodedprivateKey=new byte[fileIn available()]; finleIn read(encodedprivateKey); fileIn close(); PKCS EncodeKeySpec privKeySpec= new PKCS EncodeKeySpec(encodedprivateKey); KeyFactory keyFactory=KeyFactory getInstance( DSA ); PrivateKey privKey=keyFactory generatePrivate(privateKeySpec); Signature dsa=Signature getInstance( SHA/DSA ); dsa initSign(privKey); FileInputStream fis=new FileInputStream(args[ ]); while(fis available()!= ) b=(byte)fis read(); dsa update(b); fis close(); byte[] sig=dsa sign(); fileOut=new FileOutputStream(args[ ]); fileOut write(sig); fileOut close(); System out println( OK ); catch(Exception e) ///////// ///////////////////////End of SignData java////////////////// SignData java从文津中读取已编码的私钥字节 利用PKCS EncodeKeySpec对象将已编码的四月字节转换为PrivateKey对象 然后利用Signature签名数据文件 生成签名数据 并将签名数据写道文件中 //////VerifySign java///////////// import java io *; import java security *; import java security spec *; public class VerifySign public static void main(String [] args) if(args length!= ) System out println( Usage:VerifySign <PublicKey> <dataFile> <SignatureFile> ); System out println( Option: ); System out println( <Public Key >The filename of the public key ); System out println( <DataFile>The filename that want to signature ); System out println( <SignatureFile>:The file name containing signature data ); System exit( ); try FileInputStream fileIn=new FileInputStream(args[ ]); byte[] encodedpubKey =new byte[fileIn available()]; fileIn read(encodedpubKey); fileIn close(); X EncodedKeySpec pubKeySpec= new X EncodedKeySpec(encodedpubKey); KeyFactory keyFactory=KeyFactory getInstance( DSA ); PublicKey pubKey=keyFactory generatePublic(pubKeySpec); FileInputStream sigStream=new FileInputStream(args[ ]); byte[] signature=new byte[sigStream available()]; sigStream read(signature); sigStream close(); signature sigObj=Signature getInstance( SHA WithDSA ); sigObj initVerify(pubKey); fileIn=new FileInputStream(args[ ]); byte b; while(fileIn available())!= ) b=(byte)fileIn read(); sigObj update(b); ; fileIn close(); boolean verifies=sigObj verify(signature); System out println( Signature verifies: +verifies); catch(Exception e)///////////// cha138/Article/program/Java/Javascript/201311/25387相关参考
这个程序和前一个又不是相似之处所以在看张孝祥老师的视频之前自己先试着做了一下结果一做不要紧从下午:多做到晚上快十点了速度很慢主要是设计经验不足很多东西都得摸索还有些
Vector在Java编程中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Vector类
反射在JavaSwing编程中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 学习过Jav
知识大全 Java SE 6中XML数字签名标准Java接口
JavaSE6中XML数字签名标准Java接口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 级
Java中消除实现继承和面向接口的编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在匆忙之际
Java编程技术中汉字问题的分析及解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在基于Ja
优化Java动画编程中的显示效果 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java动画编程
关键字:异常通告(throws)throwtrycatchRuntimeException不可检查(Unchecked)异常可检查(Checked)异常 Java编程中的异常处理是一个很常见的话题
Java编程中的return介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinzh
Java编程语言中的口令屏蔽 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目前对于Java命令