java实现文件加解密DES
时间: 2024-04-09 19:31:30 浏览: 214
Java可以使用javax.crypto包中的Cipher类来实现DES算法的文件加解密。下面是一个简单的示例代码:
```java
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
public class FileEncryptionExample {
private static final String ALGORITHM = "DES";
public static void main(String[] args) {
String key = "mysecretkey"; // 密钥
String inputFile = "input.txt"; // 输入文件
String encryptedFile = "encrypted.txt"; // 加密后的文件
String decryptedFile = "decrypted.txt"; // 解密后的文件
try {
Key secretKey = generateKey(key);
// 加密文件
encryptFile(inputFile, encryptedFile, secretKey);
// 解密文件
decryptFile(encryptedFile, decryptedFile, secretKey);
System.out.println("文件加解密完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
private static Key generateKey(String key) throws Exception {
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
return keyFactory.generateSecret(keySpec);
}
private static void encryptFile(String inputFile, String outputFile, Key secretKey) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
FileInputStream inputStream = new FileInputStream(inputFile);
FileOutputStream outputStream = new FileOutputStream(outputFile);
CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
cipherOutputStream.write(buffer, 0, bytesRead);
}
cipherOutputStream.close();
inputStream.close();
}
private static void decryptFile(String inputFile, String outputFile, Key secretKey) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
FileInputStream inputStream = new FileInputStream(inputFile);
FileOutputStream outputStream = new FileOutputStream(outputFile);
CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = cipherInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
cipherInputStream.close();
}
}
```
在上面的示例中,首先定义了一个密钥字符串 `key`,输入文件路径 `inputFile`,加密后的文件路径 `encryptedFile`,解密后的文件路径 `decryptedFile`。
然后,通过 `generateKey` 方法生成密钥对象 `secretKey`。
接下来,使用 `Cipher` 类初始化加密/解密模式,并传入密钥对象。通过 `FileInputStream` 和 `FileOutputStream` 读取和写入文件数据。
最后,通过 `CipherOutputStream` 和 `CipherInputStream` 对数据进行加密和解密。
注意:上述示例中的密钥处理方式比较简单,实际应用中需要更加安全地生成和管理密钥。
请注意,这只是一个简单的示例,实际应用中还需要处理异常、文件不存在等情况,并进行适当的错误处理。
阅读全文