Java DES算法程序
时间:2020-02-23 14:36:29 来源:igfitidea点击:
Java密码术扩展(JCE)提供了用于使用各种算法来生成密钥和数据加密/解密的框架和实现。
在本教程中,我们将使用Java DES实现来加密和解密文件。
DES是一种分组密码算法,其中我们必须使用相同的密钥进行加密和解密。
它是基本的密码技术之一。
这是不安全的,因为我们需要为客户端应用程序提供安全密钥以解密数据。
Java DES加密解密步骤
首先,我们需要使用DES算法获取
KeyGenerator实例。生成将用于加密和解密的" SecureKey"(密钥)。
使用DES算法获取
Cipher实例,一个实例用于加密模式,另一个实例用于解密模式。
使用键和IvParameterSpec对象初始化密码对象。为了加密,请使用加密密码创建" CipherOutputStream"的对象。
为了解密,使用解密密码创建CipherInputStream的对象。读取输入流并写入输出流。
下面的示例首先加密文件,然后将加密的数据保存到新文件。
然后,它解密相同的文件以创建纯文本文件。
package com.theitroad.des;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
public class DESEncryptionExample {
private static Cipher encryptCipher;
private static Cipher decryptCipher;
private static final byte[] iv = { 11, 22, 33, 44, 99, 88, 77, 66 };
public static void main(String[] args) {
String clearTextFile = "/Users/hyman/source.txt";
String cipherTextFile = "/Users/hyman/cipher.txt";
String clearTextNewFile = "/Users/hyman/source-new.txt";
try {
//create SecretKey using KeyGenerator
SecretKey key = KeyGenerator.getInstance("DES").generateKey();
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
//get Cipher instance and initiate in encrypt mode
encryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
//get Cipher instance and initiate in decrypt mode
decryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
decryptCipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
//method to encrypt clear text file to encrypted file
encrypt(new FileInputStream(clearTextFile), new FileOutputStream(cipherTextFile));
//method to decrypt encrypted file to clear text file
decrypt(new FileInputStream(cipherTextFile), new FileOutputStream(clearTextNewFile));
System.out.println("DONE");
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
| InvalidAlgorithmParameterException | IOException e) {
e.printStackTrace();
}
}
private static void encrypt(InputStream is, OutputStream os) throws IOException {
//create CipherOutputStream to encrypt the data using encryptCipher
os = new CipherOutputStream(os, encryptCipher);
writeData(is, os);
}
private static void decrypt(InputStream is, OutputStream os) throws IOException {
//create CipherOutputStream to decrypt the data using decryptCipher
is = new CipherInputStream(is, decryptCipher);
writeData(is, os);
}
//utility method to read data from input stream and write to output stream
private static void writeData(InputStream is, OutputStream os) throws IOException {
byte[] buf = new byte[1024];
int numRead = 0;
//read and write operation
while ((numRead = is.read(buf)) >= 0) {
os.write(buf, 0, numRead);
}
os.close();
is.close();
}
}
程序终止后,您可以检查纯文本文件是否具有相同的数据,以及加密文件没有纯文本数据。

