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(); } }
程序终止后,您可以检查纯文本文件是否具有相同的数据,以及加密文件没有纯文本数据。