JAVA上加密算法的实现用例(2)

qodnwk

qodnwk

2016-02-19 12:42

下面图老师小编跟大家分享一个简单易学的JAVA上加密算法的实现用例(2)教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

  添加要签名的信息
  
  public final byte[] sign()
  throws SignatureException
  返回签名的数组,前提是initSign和update
  
  public final void initVerify(PublicKey publicKey)
  throws InvalidKeyException
  用指定的公钥初始化
  参数:publicKey 验证时用的公钥
  
  public final boolean verify(byte[] signature)
  throws SignatureException
  验证签名是否有效,前提是已经initVerify初始化
  参数: signature 签名数组
   */
  import Java.security.*;
  import java.security.spec.*;
  public class testdsa {
   public static void main(String[] args) throws java.security.NoSUChAlgorithmException,java.lang.Exception {
         testdsa my=new testdsa();
         my.run();
   }
   public void run()
   {
  
   //数字签名生成密钥
   //第一步生成密钥对,假如已经生成过,本过程就可以跳过,对用户来讲myprikey.dat要保存在本地
   //而mypubkey.dat给发布给其它用户
    if ((new java.io.File("myprikey.dat")).exists()==false) {
        if (generatekey()==false) {
            System.out.println("生成密钥对败");
            return;
           };
         }
  //第二步,此用户
  //从文件中读入私钥,对一个字符串进行签名后保存在一个文件(myinfo.dat)中
  //并且再把myinfo.dat发送出去
  //为了方便数字签名也放进了myifno.dat文件中,当然也可分别发送
   try {
   java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat"));
   PrivateKey myprikey=(PrivateKey)in.readObject();
   in.close();
  
  // java.security.spec.X509EncodedKeySpec pubX509=new java.security.spec.X509EncodedKeySpec(bX509);
  
  //java.security.spec.X509EncodedKeySpec pubkeyEncode=java.security.spec.X509EncodedKeySpec
   String myinfo="这是我的信息";    //要签名的信息
   //用私钥对信息生成数字签名
   java.security.Signature signet=java.security.Signature.getInstance("DSA");
   signet.initSign(myprikey);
   signet.update(myinfo.getBytes());
   byte[] signed=signet.sign();  //对信息的数字签名
   System.out.println("signed(签名内容)="+byte2hex(signed));
  //把信息和数字签名保存在一个文件中
   java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat"));
   out.writeObject(myinfo);
   out.writeObject(signed);
   out.close();
   System.out.println("签名并生成文件成功");
   }
   catch (java.lang.Exception e) {
     e.printStackTrace();
     System.out.println("签名并生成文件失败");
   };
  
   //第三步
   //其他人通过公共方式得到此户的公钥和文件
   //其他人用此户的公钥,对文件进行检查,假如成功说明是此用户发布的信息.
   //
   try {
  
    java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("mypubkey.dat"));
    PublicKey pubkey=(PublicKey)in.readObject();
    in.close();
    System.out.println(pubkey.getFormat());
  
    in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat"));
    String info=(String)in.readObject();
    byte[] signed=(byte[])in.readObject();
    in.close();
  
   java.security.Signature signetcheck=java.security.Signature.getInstance("DSA");
   signetcheck.initVerify(pubkey);
   signetcheck.update(info.getBytes());
   if (signetcheck.verify(signed)) {
   System.out.println("info="+info);
    System.out.println("签名正常");
   }
   else  System.out.println("非签名正常");
   }
   catch (java.lang.Exception e) {e.printStackTrace();};
  
  
   }
  
   //生成一对文件myprikey.dat和mypubkey.dat---私钥和公钥,
   //公钥要用户发送(文件,网络等方法)给其它用户,私钥保存在本地
   public boolean generatekey()
   {
     try {
   java.security.KeyPairGenerator  keygen=java.security.KeyPairGenerator.getInstance("DSA");
  // SecureRandom secrand=new SecureRandom();
  // secrand.setSeed("tttt".getBytes()); //初始化随机产生器
  // keygen.initialize(576,secrand);     //初始化密钥生成器
   keygen.initialize(512);
   KeyPair keys=keygen.genKeyPair();
  //  KeyPair keys=keygen.generateKeyPair(); //生成密钥组
   PublicKey pubkey=keys.getPublic();
   PrivateKey prikey=keys.getPrivate();
  
   java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat"));
   out.writeObject(prikey);
   out.close();
   System.out.println("写入对象 prikeys ok");
   out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat"));
    out.writeObject(pubkey);
    out.close();
    System.out.println("写入对象 pubkeys ok");
    System.out.println("生成密钥对成功");
    return true;
   }
   catch (java.lang.Exception e) {
    e.printStackTrace();
    System.out.println("生成密钥对失败");

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

JAVA上加密算法的实现用例(2)

编程语言 网络编程
JAVA上加密算法的实现用例(2)

JAVA上加密算法的实现用例(1)

编程语言 网络编程
JAVA上加密算法的实现用例(1)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

利用JAVA实现DES加密算法

编程语言 网络编程
利用JAVA实现DES加密算法

IBM的MARS加密算法实现(上)

C语言教程 C语言函数
IBM的MARS加密算法实现(上)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

基于Java的IDEA加密算法

Java JAVA基础
基于Java的IDEA加密算法

java开发之MD5加密算法的实现

编程语言 网络编程
java开发之MD5加密算法的实现

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

word中破折号怎么输入

word中破折号怎么输入

VC开发小技巧(1)

VC开发小技巧(1)
下拉加载更多内容 ↓