⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serververify.java

📁 JAVA实现的可以采用公钥私钥加密解密程序
💻 JAVA
字号:
 import java.security.*;
 import java.security.spec.*;
 import java.io.*;
 import javax.crypto.*;
 
  public class ServerVerify  extends Thread{
	
	 public static void main(String[] args)
	 {
	 }
	 
	 
	  public String byte2hex(byte[] b)
    {
     String hs="";
     String stmp="";
     for (int n=0;n<b.length;n++)
      {
       stmp=(Integer.toHexString(b[n] & 0XFF));
       if (stmp.length()==1) hs=hs+"0"+stmp;
       else hs=hs+stmp;
       if (n<b.length-1)  hs=hs+":";
      }
     return hs.toUpperCase();
    }
	 
	 
	 public void run(String filename)
  {
  	 try {
    //读出发送方的公钥
   ObjectInputStream in=new ObjectInputStream(new FileInputStream("MyPubkey.dat"));
   PublicKey pubKey=(PublicKey)in.readObject();     //读出公钥
   in.close();
   System.out.println(pubKey.getFormat());
   
   //从文件中读出源文件的密文和数字签名
   in=new ObjectInputStream(new FileInputStream(filename));
    byte[] Des_info=(byte[])in.readObject();
    String info=new String(Des_info);               //读出信息
   // System.out.println("info="+info);
    byte[] Rsa_sign=(byte[])in.readObject();   //读出签名
    System.out.println("得到签名 signed="+byte2hex(Rsa_sign));
    in.close();
    
    //用发送方的公钥对数字签名解密,得到MD5和对成密钥组成的MD_Key数组
     Cipher cipher = Cipher.getInstance("RSA");
     cipher.init(Cipher.DECRYPT_MODE, pubKey);
     byte[] MD_Key = cipher.doFinal(Rsa_sign);
  	 System.out.println("得到消息摘要和对成密钥:"+byte2hex(MD_Key));
     
     //分解出消息摘要和对成密钥
     int len = MD_Key.length;
     byte[] MD_1= new byte[128];
     byte[]  key =new  byte[56];
     int i;
     for (i=0;i<128;i++)  //因为用MD5产生的数字摘要为128位
       MD_1[i]=MD_Key[i];        //将摘要部分提取出来赋给数组MD_1
     //数组中的128位以后的元素即为对称密钥
      while(i<len-1)
      { 
       key[i]=MD_Key[i];}  
       //将对称密钥提取出来赋给数组Key[]
      
       Key SingleKey=(Key)(key); /*将对称密钥强制类型转换为key型*/
       
       /*得到对称密钥后,通过DES的解密算法将密文变成明文,再将明文用MD5算法生成消息摘要并保存在数组MD_2[]中*/
      //对对称密钥解密得到原文件
     cipher = Cipher.getInstance("DES");
     cipher.init(Cipher.DECRYPT_MODE,SingleKey);
     byte[] info_Plain= cipher.doFinal(Des_info);
     System.out.println("明文加密后得到的信息:"+byte2hex(info_Plain));
     System.out.println("解密后的信息:"+(new String(info_Plain)));
   
    /*将明文用MD5生成消息摘要,并保存再MD_2数组中*/
     MessageDigest messageDigest = MessageDigest.getInstance("MD5");
     messageDigest.update(info_Plain);
	 byte[] MD_2 = messageDigest.digest();   //得到消息的摘要MD_1里
	 System.out.println("经过MD5消息摘要是:"+byte2hex(MD_2));
	 
	 /*将MD_1[] 和MD_2[]做比较,若相等,则签名正确*/
     
    for( i=0;i<128;i++)
    { 
     if (MD_1[i]!=MD_2[i])
      {
       System.out.println("Signature error!");
       System.exit(0);
       }
     }
    System.out.println("Signature success!");
    
  
   }
    catch (Exception e) {
    e.printStackTrace();
    System.out.println(e.toString());
   
     }
  }
 } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -