★实例说明
本实例给出Java中创建对称密钥的步骤,并通过对象序列化方式保存在文件中。
★编程思路:
(1) 获取密钥生成器
KeyGenerator kg=KeyGenerator.getInstance("DESede");
分析:Java中KeyGenerator类中提供了创建对称密钥的方法。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”,则可以是112或168位,其中112位有效;若是“AES”,可以是128, 192或256位;若是“Blowfish”,则可以是32至448之间可以被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类型的对象k的getEncoded( )方法,返回的编码放在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中的Blowfish对称密钥加密算法是一种广泛使用的数据加密技术,特别是在网络通信和存储安全领域。Blowfish算法由Bruce Schneier在1993年设计,以其高效和安全著称。它属于对称密钥加密体系,这意味着加密和解密...
本资源“基于Java的Blowfish对称密钥加密算法类和实例”提供了在Java中实现Blowfish算法的详细代码示例,帮助开发者理解和应用这种加密技术。 Blowfish算法的特点在于其快速的加密和解密速度,以及可以设置不同长度...
在提供的压缩包文件“Java中的Blowfish对称密钥加密算法类和实例”中,可能包含了一个示例程序,展示了如何在Java中实现上述步骤。通过阅读和理解这个示例,开发者可以更好地掌握Blowfish加密算法的使用,从而在自己...
Java中的Blowfish对称密钥加密算法是一种广泛使用的安全技术,主要应用于数据加密,确保信息在传输过程中的隐私和安全性。Blowfish算法由Bruce Schneier在1993年设计,以其高效和安全著称。在Java中,我们可以使用`...
Blowfish是一种对称密钥加密算法,由Bruce Schneier在1993年设计,因其高效性和安全性而被广泛采用。本实例旨在通过Java实现Blowfish算法,帮助开发者理解其工作原理并应用于实际项目中。 Blowfish算法的核心在于它...
本文将深入探讨Java如何实现密钥分配,以及如何利用对称密钥和非对称密钥(公钥和私钥)来保障通信的安全性。 首先,我们要理解密钥分配的基本概念。在通信过程中,对称密钥用于加密和解密同一数据,效率高但不适合...
在Java环境中创建RAS密钥可能涉及到加密算法、密钥对生成、数字证书等概念。本文将深入探讨如何使用Java来创建RAS密钥。 首先,我们需要理解RAS密钥的用途。RAS密钥通常用于验证用户身份,确保只有授权的用户可以...
此外,对于大量数据,非对称加密的效率较低,通常我们会先用公钥加密一个对称密钥,然后用这个对称密钥加密大量数据,这种方式称为混合加密。 7. **证书与证书链**:在实际应用中,公钥通常会封装在一个X.509证书中...
以上代码展示了如何在Java中生成对称密钥(AES)和非对称密钥对(RSA)。压缩包中的实例可能会包含这些或其他更复杂的加密技术,例如使用密钥工厂处理密钥,或者在实际应用中使用密钥存储和管理。 总之,理解并熟练...
Blowfish是一种对称密钥加密算法,由Bruce Schneier在1993年设计,因其高效性和安全性而广受欢迎。本实例源码提供了Java实现的Blowfish加密算法类和实例,非常适合开发者学习和应用。 Blowfish算法的特点: 1. **...
`javax.crypto.KeyGenerator` 是一个用于生成对称密钥的类。它使用特定的密钥生成参数,如密钥长度,来生成密钥对。例如,我们可以使用 `KeyGenerator.getInstance("AES")` 来生成AES(高级加密标准)的密钥。 3. ...
同时,非对称加密效率较低,通常用于加密小量数据或加密对称密钥,而非大量数据。 这个"Java非对称加密源码实例.zip"可能包含了一些这样的示例,演示如何在Java中实现上述步骤,帮助开发者更好地理解和应用非对称...
本篇文章将详细探讨Java中的对称加解密技术,特别是DESEDE(也称为3DES)算法。 对称加密是一种常见的加密方式,它的特点是加密和解密使用相同的密钥。这种加密方法速度快,适用于大量数据的加密。在Java中,我们...
这里要注意,DES的密钥长度必须是8字节,且Java中的DES实现会忽略密钥的第8字节,因此建议使用7字节或更少的字符来创建密钥。 3. 初始化Cipher对象: ```java Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5...
核心类包括 Cipher(用于加密和解密)、KeyGenerator(用于生成密钥)以及SecretKey(代表对称密钥)。以下是一个简单的Java DES加密步骤: 1. **生成DES密钥**:首先,我们需要一个DES密钥。这可以通过`...
我们可以使用以下步骤创建RSA密钥对: 1. 引入必要的库: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; ...
1. **密钥生成**:首先,我们需要创建一个KeyPairGenerator对象,并指定算法为RSA。然后,通过调用`generateKeyPair()`方法生成一对密钥,包括公钥(PublicKey)和私钥(PrivateKey)。 ```java KeyPairGenerator ...
- `java.security.PublicKey`和`java.security.PrivateKey`:表示公钥和私钥,是所有非对称密钥的父接口。 - `Cipher`:进行加密和解密操作,如`Cipher.init(Cipher.ENCRYPT_MODE, publicKey)`和`Cipher.init...
在Java中生成密钥并不仅仅是创建密钥对,还需要理解如何正确地使用它们,以及如何在不同场景下选择合适的加密算法。例如,RSA适用于非对称加密,而AES更适合对大量数据进行对称加密。在实际项目中,通常会结合使用这...