java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中

本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似。生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使用key秘钥进行解密操作。(期间一定要保存key秘钥不被泄露)

package com.bobo.encryption.asymmetric;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.security.Key;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESedeKeySpec;

import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;

/**

* 把生成的密钥key保存到文件 和 读取文件中保存的密钥key

* (发送方进行加密,接收方进行解密)

* @author win7

*

*/

public class SaveKeyTest {

//要加密的数据

public static String bobo="http://blog.csdn.net/bobo0915";

//加密后的密文数据

public static byte[] result; //需要传输给 接收方 接收方进行解密

public static void main(String[] args) {

// TODO Auto-generated method stub

sendSecret();

receiveSecret();

}

/**

* 模拟发送方 生成秘钥,并保存秘钥

* (通过其他方式把秘钥提供给接收方,邮件,网络,U盘...)

*/

public static void sendSecret(){

try {

//1.初始化key秘钥

KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");

keyGenerator.init(new SecureRandom());

SecretKey secretKey= keyGenerator.generateKey();

//转换key秘钥

DESedeKeySpec deSedeKeySpec=new DESedeKeySpec(secretKey.getEncoded());

SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede");

Key key= secretKeyFactory.generateSecret(deSedeKeySpec);

//2.对生成的密钥key进行编码保存

String keyencode= HexBin.encode(key.getEncoded());

//写入文件保存

File file=new File("F:\\keyencode.txt");

OutputStream outputStream=new FileOutputStream(file);

outputStream.write(keyencode.getBytes());

outputStream.close();

System.out.println(keyencode+" -----> key保存成功");

//3.进行加密

Cipher cipher=Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, key);

result= cipher.doFinal(bobo.getBytes());

System.out.println("发送方进行加密:"+HexBin.encode(result));

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

/**

* 模拟接收方 读取文件中的秘钥,进行加解密

*/

public static void receiveSecret(){

try {

//1.读取文件中的密钥

File file = new File("F:\\keyencode.txt");

InputStream inputStream = new FileInputStream(file);//文件内容的字节流

InputStreamReader inputStreamReader= new InputStreamReader(inputStream); //得到文件的字符流

BufferedReader bufferedReader=new BufferedReader(inputStreamReader); //放入读取缓冲区

String readd="";

StringBuffer stringBuffer=new StringBuffer();

while ((readd=bufferedReader.readLine())!=null) {

stringBuffer.append(readd);

}

inputStream.close();

String keystr=stringBuffer.toString();

System.out.println(keystr+" -----> key读取成功"); //读取出来的key是编码之后的 要进行转码

//2.通过读取到的key获取到key秘钥对象

byte[] keybyte= HexBin.decode(keystr);

DESedeKeySpec deSedeKeySpec=new DESedeKeySpec(keybyte);

SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede");

Key key= secretKeyFactory.generateSecret(deSedeKeySpec); //获取到key秘钥

//3.进行解密

Cipher cipher=Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, key);

result= cipher.doFinal(result);

System.out.println("接收方进行解密:"+new String(result));

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值