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();
}
}
}
總結
以上是生活随笔為你收集整理的java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle查tigger,Oracle
- 下一篇: python判断队列是否为空_pytho