📄 filesign.java
字号:
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.security.Signature;
import java.security.SignatureException;
import java.io.*;
import java.lang.*;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.security.SignatureException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class filesign
{
public static void main(String arg[])
{
FileInputStream file=null;
byte[] filedata=null;
byte[] endata=null;
byte[] sinfiledata=null;
KeyPairGenerator keygen=null;
KeyPair key=null;
Cipher cipher=null;
try{
//filedata=new byte[(new Long((new File("sheng.txt")).length())).intValue()];
filedata=new byte[(new Long((new File("sheng.txt")).length())).intValue()];
file=new FileInputStream("sheng.txt");
file.read(filedata);
System.out.println("文件的信息是:");
System.out.println(new String(filedata));
}
catch(FileNotFoundException e)
{
System.out.println("FileNotFound");
System.out.println(e.getMessage());
}
catch(IOException e)
{
e.printStackTrace();
}
try{
//生成密钥
//KeyPairGenerator keygen=KeyPairGenerator.getInstance("RSA");
keygen=KeyPairGenerator.getInstance("RSA");
keygen.initialize(1024);
//KeyPair key=keygen.generateKeyPair();
key=keygen.generateKeyPair();
//Cipher cipher=Cipher.getInstance("RSA");
cipher=Cipher.getInstance("RSA");
//加密信息
cipher.init(Cipher.ENCRYPT_MODE,key.getPrivate());
endata=cipher.doFinal(filedata);
System.out.println("加密后的信息:");
System.out.println(new String(endata));
//加密后的信息存入enfile.txt文件中
FileOutputStream fileoutput=null;
File enfile=new File("enfile.txt");
if(enfile.exists())
{
System.out.println("file is existed");
fileoutput=new FileOutputStream("enfile.txt");
}
else
if(enfile.createNewFile())
{
System.out.println("创建文件成功");
fileoutput=new FileOutputStream("enfile.txt");
}
else
System.out.println("创建文件失败");
fileoutput.write(endata);
fileoutput.close();
//signature签名
Signature signature=Signature.getInstance("SHA1WithRSA");
signature.initSign(key.getPrivate());
signature.update(filedata);
byte[] signaturedata=signature.sign();
System.out.println("签名后的信息");
System.out.println(new String(signaturedata));
//签名后的信息存入signaturefile.txt文件中
fileoutput=null;
File signaturefile=new File("signaturefile.txt");
if(signaturefile.exists())
{
System.out.println("the signaturefile.txt is existed文件存在");
fileoutput=new FileOutputStream(signaturefile);
}
else
{
if(signaturefile.createNewFile())
{
System.out.println("create signaturefile.txt successfully");
fileoutput=new FileOutputStream("signaturefile.txt");
}
else
System.out.println("创建签名文件失败");
}
fileoutput.write(signaturedata);
fileoutput.close();
//从签名文件中取出签名信息进行验证
file=null;
sinfiledata=new byte[(new Long((new File("signaturefile.txt")).length()).intValue())];
file=new FileInputStream("signaturefile.txt");
file.read(sinfiledata);
System.out.println("读入签名文件信息为");
System.out.println(sinfiledata);
signature.initVerify(key.getPublic());
signature.update(filedata);
//验证
if(signature.verify(sinfiledata))
System.out.println("验证成功");
else
System.out.println("验证失败");
}
catch(IllegalBlockSizeException e)
{
System.out.println(e.getMessage());
}
catch(NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch(InvalidKeyException e)
{
e.printStackTrace();
}
catch(NoSuchPaddingException e)
{
System.out.println(e.getMessage());
}
catch(BadPaddingException e)
{
System.out.println(e.getMessage());
}
catch(FileNotFoundException e)
{
System.out.println(e.getMessage()+"FileNotFound");
}
catch(IOException e)
{
System.out.println(e.getMessage()+"IOException");
}
catch(SignatureException e)
{
System.out.println(e.getMessage()+"Signature Failed");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -