java安全2

package com.ngsn.security;


import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
* 对称加密(加密解密的密钥一样)
* @author John.Yao
*
*/
public class SecretKeyTest1 {

public static void main(String[] args) throws Exception{
// SecretEncrypt();

SecretDecrypt();

}
/**
* 加密方法
* 将加密的密钥保存在zxx_secret.key文件中
* 将加密的数据保存在zxx.data文件中
* @throws Exception
*/
private static void SecretEncrypt() throws Exception{
//Cipher 此类为加密和解密提供密码功能
Cipher cipher = Cipher.getInstance("AES");
//根据AES的加密方法生成一个密钥
SecretKey key = KeyGenerator.getInstance("AES").generateKey();

FileOutputStream fosKey = new FileOutputStream("zxx_secret.key");
ObjectOutputStream oosSecretKey = new ObjectOutputStream(fosKey);
//将密钥保存到zxx_secret.key文件中
oosSecretKey.writeObject(key);
oosSecretKey.close();
fosKey.close();


//初始化
//Cipher.ENCRYPT_MODE 为加密模式
//key 为加密的密钥
cipher.init(Cipher.ENCRYPT_MODE,key);
//对byte[] 进行加密,返回一个加密后的byte[]
byte[] result = cipher.doFinal("abc".getBytes());
System.out.println("result----->"+new String(result));

FileOutputStream fosData = new FileOutputStream("zxx.data");
fosData.write(result);
fosData.close();
}
/**
* 解密方法
* @throws Exception
*/
private static void SecretDecrypt()throws Exception{
//Cipher 此类为加密和解密提供密码功能
Cipher cipher = Cipher.getInstance("AES");
//从zxx_secret.key文件中得到key
FileInputStream fisKey = new FileInputStream("zxx_secret.key");
ObjectInputStream ois = new ObjectInputStream(fisKey);
Key key = (Key)ois.readObject();
ois.close();
fisKey.close();
//解密
//初始化
cipher.init(Cipher.DECRYPT_MODE, key);
//从zxx.data文件中得到加密的数据
FileInputStream fis = new FileInputStream("zxx.data");
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();
//对加密的数据进行解密
byte[] b = cipher.doFinal(result);
System.out.println("b------>"+new String(b));


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值