`

Java创建对称密钥的步骤

 
阅读更多

实例说明

本实例给出Java中创建对称密钥的步骤,并通过对象序列化方式保存在文件中。

编程思路:

(1)       获取密钥生成器

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

分析:JavaKeyGenerator类中提供了创建对称密钥的方法。Java中的类一般使用new操作符通过构造器创建对象,但KeyGenerator类不是这样,它预定义了一个静态方法getInstance(),通过它获得KeyGenerator类型的对象。这种类成为工厂类或工厂。

方法getInstance( )的参数为字符串类型,指定加密算法的名称。可以是 “Blowfish、“DES”、“DESede”、“HmacMD5”或“HmacSHA1”等。这些算法都可以实现加密,这里我们不关心这些算法的细节,只要知道其使用上的特点即可。其中“DES”是目前最常用的对称加密算法,但安全性较差。针对DES安全性的改进产生了能满足当前安全需要的TripleDES算法,即“DESede”。“Blowfish”的密钥长度可达448位,安全性很好。“AES”是一种替代DES算法的新算法,可提供很好的安全性。

(2)       初始化密钥生成器

kg.init(168);

分析:该步骤一般指定密钥的长度。如果该步骤省略的话,会根据算法自动使用默认的密钥长度。指定长度时,若第一步密钥生成器使用的是“DES”算法,则密钥长度必须是56位;若是“DESede”,则可以是112168位,其中112位有效;若是“AES”,可以是128, 192256位;若是“Blowfish”,则可以是32448之间可以被8整除的数;“HmacMD5”和“HmacSHA1”默认的密钥长度都是64个字节。

(3)       生成密钥

         SecretKey k=kg.generateKey( );

分析:使用第一步获得的KeyGenerator类型的对象中generateKey( )方法可以获得密钥。其类型为SecretKey类型,可用于以后的加密和解密。

(4)       通过对象序列化方式将密钥保存在文件中

            FileOutputStream  f=new FileOutputStream("key1.dat");

               ObjectOutputStream b=new  ObjectOutputStream(f);

               b.writeObject(k);

分析:ObjectOutputStream类中提供的writeObject方法可以将对象序列化,以流的方式进行处理。这里将文件输出流作为参数传递给ObjectOutputStream类的构造器,这样创建好的密钥将保存在文件key1.data中。

代码与分析

import java.io.*;

import javax.crypto.*;

public class Skey_DES{

 public static void main(String args[])

 throws Exception{

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

            kg.init(168);

            SecretKey k=kg.generateKey( );

            FileOutputStream  f=new FileOutputStream("key1.dat");

            ObjectOutputStream b=new  ObjectOutputStream(f);

            b.writeObject(k);

         }

}

运行java  Skey_DES,在当前目录下将生成文件key1.dat,其中包含的密钥可以用于使用Triple DES算法的加密和解密。

 

 

以字节保存对称密钥

实例说明

2.2.1小节的实例将密钥通过对象序列化方式保存在文件中,在文件中保存的是对象,本实例以另一种方式保存在文件中,即以字节保存在文件中。

编程思路:

Java中所有的密钥类都有一个getEncoded( )方法,通过它可以从密钥对象中获取主要编码格式,其返回值是字节数组。其主要步骤为:

(1)       获取密钥

FileInputStream f=new FileInputStream("key1.dat");

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject( );

 

分析:该步骤与2.2.1小节的第4步是相对应的,2.2.1小节的第4步将密钥对象以对象流的方式存入文件,而这一步则将文件中保存的对象读取出来以便使用。首先创建文件输入流,然后将其作为参数传递给对象输入流,最后执行对象输入流的readObject( )方法读取密钥对象。由于readObject( )返回的是Object类型,因此需要强制转换成Key类型。

这里使用的是已有的密钥,也可以不使用这里的三行代码,而使用2.1.1小节中的前三步的代码生成新的密钥再继续下面的步骤。

(2)       获取主要编码格式

byte[ ] kb=k.getEncoded( );

 

分析:执行SecretKey类型的对象kgetEncoded( )方法,返回的编码放在byte类型的数组中。

(3)       保存密钥编码格式

FileOutputStream  f2=new FileOutputStream("keykb1.dat");

    f2.write(kb);

分析:先创建文件输出流对象,在其参数中指定文件名,如keykb1.dat。然后执行文件输出流的write( )方法将第2步中得到的字节数组中的内容写入文件。

 

代码与分析

import java.io.*;

import java.security.*;

public class Skey_kb{

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

FileInputStream f=new FileInputStream("key1.dat");

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject( );

        byte[ ] kb=k.getEncoded( );

        FileOutputStream  f2=new FileOutputStream("keykb1.dat");

       f2.write(kb);

        // 打印密钥编码中的内容

        for(int i=0;i<kb.length;i++){

             System.out.print(kb[i]+",");

        }

   }

}

 

程序中在保存了密钥编码后,又使用循环语句将字节数组中的内容打印出来。这样可以较为直观地看到密钥编码的内容。

 

运行程序

输入java  Skey_kb 运行程序,在程序的当前目录中将产生文件名为keykb1.dat的文件,屏幕输出如下:

 

11,-105,-119,50,4,-105,16,38,-14,-111,21,-95,70,-15,76,-74,67,-88,59,-71,55,-125,104,42,

 

此即程序中创建的密钥的编码内容,如果用文本编辑器打开keykb1.dat,看到的不是上面的数字而是类似下面的字符:


2?&

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA编写的加密解密聊天工具

    通信的步骤基本如下:首先,服务器端随机产生一对RSA 密钥,将公钥发送给客户端,客户端将自己的对称密钥用公钥加密发送给服务器端,服务器端接收到加密后的密钥后,用自己的私钥解密得到对称密钥。然后服务器端和...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    Java源码包100个设计实例.zip

    Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    RSA实验报告.docx

    使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信,这时网络中将需要n(n-1)/2个密钥(其中,每个用户都需要...

    基于JAVA的RSA文件加密软件的设计与实现.rar

    基于Java的RSA文件加密软件是一种用于对文件进行加密和解密的应用程序,它利用RSA(Rivest-Shamir-Adleman)非对称加密算法来实现数据的保护和安全传输。以下是对该软件设计与实现的描述: 密钥生成: 软件首先...

    Windows电脑-文件加密-解密助手

    ### 1. 介绍 windows系统下文件加密工具,采用java开发,用于保护隐私最适合不过啦!eclipse工具开发,采用swing组件做页面。 ...- 使用AES对称密钥加密文件,支持视频、音乐、图片、各种文档资料

    信息安全实验报告.doc

    " " " "实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等, " "用硬件逻辑或者算法描述) " "import java.security.spec.*; " "import javax.crypto.*; " "import javax.crypto.spec.*; " "class...

Global site tag (gtag.js) - Google Analytics