签名文件签名(java代码)

代码签名  时间:2021-04-08  阅读:()

package encryptdecrypt;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.ScrollPaneConstants;publicclass FileSignature {

/**

* @param args

*/publicstaticvoid main(String[ ] args) {// TODO Auto-generated method stub

DemoWindow5 dw = new DemoWindow5("文件签名");dw.setBounds(dw.getToolkit() .getScreenSize() .width / 3,dw.getToolkit()

.getScreenSize() .height / 3,dw.getToolkit() .getScreenSize() .width / 3,dw.getToolkit()

.getScreenSize() .height / 3);dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);dw.setVisible(true) ;

}

}classDemoWindow5extends JFrame implements ActionListener {JMenuBar menuBar = new JMenuBar();

JMenu fileMenu = new JMenu("文件");

JMenuItem openMenuItem = new JMenuItem("打开文件");

JMenuItem saveMenuItem = new JMenuItem("保存文件");

JMenu signMenu = new JMenu("签名验证");

JMenuItem generateItem = new JMenuItem("生成密钥对");JMenuItem signItem = new JMenuItem("签名文件") ;

JMenuItem validateItem = new JMenuItem("验证文件");

JTextArea jta = new JTextArea();intv = Sc rollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;inth = Sc rollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;JScrollPane jsp = new JScrollPane(jta, v, h) ;public DemoWindow5(String title) {super(title);fileMenu.add(openMenuItem);fileMenu.add(saveMenuItem);signMenu.add(generateItem);signMenu.add(signItem);signMenu.add(validateItem);menuBar.add(fileMenu);menuBar.add(signMenu);this.setJMenuBar(menuBar);add(jsp);openMenuItem.addActionListener(this);saveMenuItem.addActionListener(this);

generateItem.addActionListener(this);signItem.addActionListener(this);validateItem.addActionListener(this);

}publicvoid actionPerformed(ActionEvent e) {

// TODO Auto-generated method stubif (e.getSource() == openMenuItem) {openFile();

} elseif (e.getSource() == saveMenuItem) {saveFile();

} elseif (e.getSource() == generateItem) {generateKeys();

} elseif (e.getSource() == signItem) {sign();

} elseif (e.getSource() == validateItem) {validateSign();

}

}publicvoid openFile() {

String fileName = null;

// System.getProperty("user.dir")是获得用户当前的工作目录JFileChooser jfc = new

JFileChooser(System.getProperty("user.dir") ) ;jfc.setDialogTitle("打开文件");

//如果选中获取选择的文件的完整路径if (jfc.showOpenDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();

System.out.println(fileName);

}if (fileName == null)return;try {

FileInputStream fis = new FileInputStream(fileName);byte[ ] text = newbyte[f is.available()] ;f is.read(text);fis.close();

jta.setText(new String(text) );

} catch (Exception e1) {e1.printStackTrace();

}

}publicvoid saveFile() {

String fileName = null;

JFileChooser jfc = new

JFileChooser(System.getProperty("user.dir") ) ;jfc.setDialogTitle("保存文件");if (jfc.showSaveDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();

}if (fileName == null)return;try {

FileOutputStream fos = new FileOutputStream(fileName,false) ;fos.write(jta.getText() .getBytes()) ;fos.close();

} catch (Exception e1) {e1.printStackTrace();

}

}publicvoid generateKeys() {try {

String fileName = null;

JFileChooser jfc = new JFileChooser();jfc.setDialogTitle("生成密钥对");jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);if (jfc.showSaveDialog(this) ==

J FileChooser.APPROVE_OPTION) {

fileName = jfc.getSelectedFile() .getPath();}if (fileName == null)return;

File file = new File(fileName);if ( !file.exists() ) {file.mkdir();

}

//创建DSA密钥对生成器

KeyPairGenerator keygen =

KeyPairGenerator.getInstance("DSA");

//采用1024位DSA密钥keygen.initialize(1024);

//得到密钥对

KeyPair keys = keygen.generateKeyPair();

PublicKey pubkey = keys.getPublic();

PrivateKey prikey = keys.getPrivate();

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName + "/公钥.dat") );out.writeObject(pubkey);out.close();out = new ObjectOutputStream(new

FileOutputStream(fileName

+ "/私钥.dat") );out.writeObject(prikey);out.close();

} catch (Exception e1) {e1.printStackTrace();

}

}publicvoid sign() {try {

String fileName = null;

JFileChooser jfc = new JFileChooser();jfc.setDialogTitle( "导入私钥文件");

if (jfc.showOpenDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();}if (fileName == null)return;

//获取私钥

ObjectInputStream ois = new ObjectInputStream(newFileInputStream(f ileName) );

PrivateKey prikey = (PrivateKey) ois.readObject() ;//创建SHAlwithDSA签名类java.security.Signature dsa =java.security.Signature.getInstance(

"SHA1withDSA", "SUN");

//设置生成摘要的私钥dsa.initSign(prikey);

//对文本区的文本进行签名验证dsa.update(jta.getText() .getBytes( "UTF-8"));

//得到签名后的签名摘要值byte[ ] signText = dsa.sign();jfc = new JFileChooser();jfc.setDialogTitle("保存签名文件");if (jfc.showSaveDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();}if (fileName == null)return;

FileOutputStream fos = new FileOutputStream(fileName);fos.write(signText);fos.close();

} catch (Exception e1) {e1.printStackTrace();

}

}

publicvoid validateSign() {try {

String fileName = null;

JFileChooser jfc = new JFileChooser();jfc.setDialogTitle("导入公钥文件");if (jfc.showOpenDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();}if (fileName == null)return;

ObjectInputStream in = new ObjectInputStream(newFileInputStream(f ileName) );

PublicKey pubkey = (PublicKey) in.readObject();jfc = new JFileChooser();jfc.setDialogTitle("打开签名文件");if (jfc.showOpenDialog(this) ==

J FileChooser.APPROVE_OPTION) {fileName = jfc.getSelectedFile() .getPath();}if (fileName == null)return;

//从签名文件中读取签名摘要

FileInputStream fis = new FileInputStream(fileName);byte[ ] sigToVerfiy = newbyte[fis.available() ] ;f is.read(sigToVerf iy);fis.close();

//创建SHA1withDSA签名类java.security.Signature sig =java.security.Signature.getInstance(

"SHA1withDSA", "SUN");

//设置验证的公钥sig.initVerify(pubkey);

//验证文本区sig.update(jta.getText() .getBytes( "UTF-8"));

//显示验证信息

if (sig.verify(sigToVerfiy)) {

JOptionPane.showMessageDialog(null, "签名正确");} else {

JOptionPane.showMessageDialog(null, "签名不正确");}

} catch (Exception e1) {e1.printStackTrace();

}

}

}

LOCVPS:美国XEN架构VPS七折,全场八折,日本/新加坡XEN架构月付29.6元起

LOCVPS发来了针对XEN架构VPS的促销方案,其中美国洛杉矶机房7折,其余日本/新加坡/中国香港等机房全部8折,优惠后日本/新加坡机房XEN VPS月付仅29.6元起。这是成立较久的一家国人VPS服务商,目前提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建...

Digital-VM80美元新加坡和日本独立服务器

Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...

香港服务器促销:香港华为云混合服务器、高防服务器首月半价,普通110M大带宽服务器月付799,付5用6,付10用13

博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...

代码签名为你推荐
采用3602019支付宝五福支付宝五福是哪五福?360和搜狗360搜索和搜狗搜索谁好谁流量大?为什么我在网上搜索到的数据有一定矛盾?做广告推广哪个好呢?企业信息查询系统官网怎么在网上查询企业营业执照是否存在?163yeah163,126,yeah哪个更好啊,各有什么特点啊重庆杨家坪猪肉摊主杀人昨天重庆九龙坡出了严重交通事故吗flashftp下载禁室迷情夜下载地址给我 谢谢要能下载出来的申请支付宝账户怎样申请支付宝账户?要填写什么信息?传奇域名谁能帮忙查查传奇的IP和域名科创板首批名单中国兰男队员名单
传奇服务器租用 vps论坛 域名停靠一青草视频 2019年感恩节 外贸主机 私服服务器 美国仿牌空间 免费个人博客 云图标 网站cdn加速 linux服务器维护 空间合租 微软服务器操作系统 上海服务器 优酷黄金会员账号共享 华为云盘 金主 服务器硬件配置 存储服务器 privatetracker 更多