知识大全 如何在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

相关参考