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

📄 sign.java

📁 密码学中RSA,AES和数值签名的实现。。。。
💻 JAVA
字号:
import java.io.*;
import java.math.BigInteger;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class sign
{
private static final String publickey = "publickey.key";
private static final String privatekey = "privatekey.key";
private static final String Algorithm ="RSA";

/**
 * 生成密匙对
 *
 */
public static void genpairKey() {
	try {
		KeyPairGenerator kpg = KeyPairGenerator.getInstance(Algorithm);
	    kpg.initialize(1024);
	    KeyPair keypair = kpg.generateKeyPair();
	    PublicKey pbkey = keypair.getPublic();
	    PrivateKey prkey = keypair.getPrivate();
	    writeKey(publickey, pbkey);
	    writeKey(privatekey, prkey);
	} catch (NoSuchAlgorithmException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

/**
 * 将生成的密匙写入对应的文件
 * @param filename
 * @param obj
 */
public static void writeKey(String filename,Object obj) {
	File file = new File(filename);
	try {
		FileOutputStream fout = new FileOutputStream(file);
		ObjectOutputStream out =new ObjectOutputStream(fout);
		out.writeObject(obj);
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
/**
 * 从对应的文件中得到密匙
 * @param filename
 * @return
 */
public static Object getKey(String filename) {
	File file = new File(filename);
	try {
		FileInputStream fin = new FileInputStream(file);
		ObjectInputStream in = new ObjectInputStream(fin);
		Object t = in.readObject();
		return t;
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
	}
	return null;
} 
/*
从文件中读取字符串
*/
public static String getString(String path) {
	File file = new File(path);
	StringBuffer buffer = new StringBuffer();
	byte[] bytes = new byte[1024];
	int i = 0;
	try
	{
		FileInputStream fin = new FileInputStream(file);
		
		while((i=fin.read(bytes))>0) {
           buffer.append(new String(bytes,0,i));
		}

		fin.close();
	}
	catch (Exception e)
	{
		e.printStackTrace();
		return null;
	}
	return buffer.toString();
}

public static byte[] getBytes(String path) {
	File file = new File(path);
	try
	{
		int i = 0;
		FileInputStream fin = new FileInputStream(file);
		byte[] bytes = new byte[fin.available()];
		i=fin.read(bytes);
		fin.close();
		return bytes;
	}
	catch (Exception e)
	{
		e.printStackTrace();
		return null;
	}
}

/*
将字符串写入文件中
*/
public static void storeString(String str, String path) {
   File file = new File(path);
   try
   {
	 FileOutputStream fout = new FileOutputStream(file);
	 fout.write(str.getBytes());
	 fout.close();
   }
   catch (Exception e)
   {
	 e.printStackTrace();
   }
  
   
}

public static void storeString(byte[] str, String path) {
   File file = new File(path);
   try
   {
	 FileOutputStream fout = new FileOutputStream(file);
	 fout.write(str);
	 fout.close();
   }
   catch (Exception e)
   {
	 e.printStackTrace();
   }
}
/**
签名
*/
public static void signed(){
   PrivateKey privatekey = (PrivateKey)getKey(sign.privatekey);
   String before = getString("before.txt");

   try {
	Signature signature =Signature.getInstance("SHA1WithRSA");
	   signature.initSign(privatekey);
	   signature.update(before.getBytes("UTF8"));
	   byte[] b = signature.sign();
       storeString(b,"sign.txt"); 
} catch (InvalidKeyException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (SignatureException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (UnsupportedEncodingException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
}

/**
验证签名
*/
public static void verify(){
	PublicKey key = (PublicKey)getKey(sign.publickey);
    String before = getString("before.txt");
	byte[] signs = getBytes("sign.txt");
	try
	{
    Signature signature =Signature.getInstance("SHA1WithRSA");
    signature.initVerify(key);
    signature.update(before.getBytes("utf8"));
		if(signature.verify(signs)){
           System.out.println("签名验证正确!!");
		} else {
          System.out.println("签名验证失败!!");
		}
	}
	catch (Exception e)
	{
		 e.printStackTrace();
		 System.out.println("签名验证失败!!");
	}

}

public static void main(String[] args){
	System.out.println("可选键对应操作如下");
	System.out.println("1:生成公密匙对。2:签名。3:验证。4:退出。");
	BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
	String in = null;
	String mi = null;
	try
	{
	  while(true){
       in = read.readLine();
	   if(in.equals("1")){
          System.out.println("生成中..");
		  genpairKey();
		  System.out.println("公密匙对已经生成!");
	   } else if(in.equals("2")){
         System.out.println("签名...");
         signed();
		 System.out.println("生成签名成功!");
	   } else if(in.equals("3")){
		System.out.println("验证中.....");
         verify();
	   } else if(in.equals("4")){
		   System.out.println("Byte Byte!");
		   break;
	   } else {
		   System.out.println("输入有误,请按提示键进行操作!!");
	   }
	  }
	}
	catch (Exception e)
	{
	}    


}

}
                                

⌨️ 快捷键说明

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