首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

java保险6

2012-09-10 
java安全6package com.ngsn.securityimport java.io.ByteArrayOutputStreamimport java.io.FileInputStr

java安全6

package com.ngsn.security;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.Key;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;/** * 数字签名(私钥签名公钥校验) * 此 Signature 类用来为应用程序提供数字签名算法功能。 * 数字签名用于确保数字数据的验证和完整性。 * @author John.Yao */public class SecretKeyTest5 {public static void main(String[] args) throws Exception{signature();verify();}/** * 签名 * 根据私钥对数据进行签名,生成签名字节 */private static void signature() throws Exception{//签名KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");KeyPair keyPair = generator.generateKeyPair();PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();//创建signature对象Signature signature = Signature.getInstance("SHA1withRSA");//私钥进行签名signature.initSign(privateKey);//更新要由字节签名或验证的数据。signature.update("到底是怎么回事,为什么不行呢".getBytes());  //签名的数据//返回所有已更新数据的签名字节。byte[] result = signature.sign();     //得到签名的字节saveKey(publicKey,"sign_public.key");saveData(result,"mysign.data");}/** * 校验 * 根据公钥和签名字节进行数据的校验 * @throws Exception  */private static void verify() throws Exception{//校验//创建signature对象Signature signature = Signature.getInstance("SHA1withRSA");//从文件中读取保存的公钥PublicKey publicKey = (PublicKey)readKey("sign_public.key");//公钥进行校验signature.initVerify(publicKey);//添加校验的数据signature.update("到底是怎么回事,为什么不行呢".getBytes());    //从文件中读取保存的签名字节byte[] signed = readData("mysign.data");//根据签名字节进行校验boolean b = signature.verify(signed);if(b){System.out.println("校验结果:"+b+",是自己的签名");}else{System.out.println("校验结果:"+b+",不是自己的签名");}}/** * 保存密钥到指定的文件中 * @param publicKey * @param fileName * @throws Exception */public static void saveKey(PublicKey publicKey,String fileName) throws Exception{FileOutputStream fosKey = new FileOutputStream(fileName);ObjectOutputStream oosSecretKey = new ObjectOutputStream(fosKey);//将密钥保存到zxx_secret.key文件中oosSecretKey.writeObject(publicKey);oosSecretKey.close();fosKey.close();}/** * 保存数据到指定的文件中 * @param data * @param fileName * @throws Exception */public static void saveData(byte[] data,String fileName) throws Exception{FileOutputStream fosData = new FileOutputStream(fileName);fosData.write(data);fosData.close();}/** * 从指定的文件中读取密钥 * @param fileName * @return * @throws Exception */public static Key readKey(String fileName) throws Exception{FileInputStream fisKey = new FileInputStream(fileName);ObjectInputStream ois = new ObjectInputStream(fisKey);Key key = (Key)ois.readObject();ois.close();fisKey.close();return key;}/** * 从指定的文件中读取数据 * @param fileName * @return * @throws Exception */public static byte[] readData(String fileName) throws Exception{FileInputStream fis = new FileInputStream(fileName);byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream bos = new ByteArrayOutputStream();while((len = fis.read(buffer)) != -1){bos.write(buffer, 0, len);}//从输出流中得到byte[]的加密数据byte[] result = bos.toByteArray();fis.close();bos.close();return result;}}



















热点排行