java生成秘钥key,并保存秘钥到文件中

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

package com.superaccount.modules.user.controller;

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("D:\\keyencode.cer"); 

            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("D:\\keyencode.cer"); 

            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(); 

        } 

    } 

}

谢谢原创作者  https://blog.csdn.net/bobo0915/article/details/50518709

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,561评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 每一个不曾起舞的日子,都是对生命的辜负。 —— 尼采 生活琐事太多的时候...
    幸运石阅读 175评论 3 4
  • 真正的好朋友是能随意调侃,疯狂吐槽的,相敬如宾的那不是朋友,是客服。 治得了你的脾气的人是你爱的人,受得了你的脾气...
    木子大嫣阅读 180评论 0 1
  • 我给你看的只是我生活中的一部分,那只是我想给你展示的一面。 虽说时代发展,信息通信发达,但手机更多的功能便是软件的...
    亦吻阅读 1,074评论 0 0