帮我写一段java代码,实现本地文件的非对称加密
时间: 2023-08-28 10:30:56 浏览: 55
好的,以下是一个简单的 Java 代码示例,使用 RSA 算法实现本地文件的非对称加密:
```java
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class FileEncryption {
public static void main(String[] args) {
String inputFile = "input.txt"; // 待加密的文件名
String outputFile = "output.enc"; // 加密后的文件名
String publicKeyFile = "public.key"; // 公钥文件名
try {
// 读取公钥
PublicKey publicKey = readPublicKey(publicKeyFile);
// 加载待加密的文件
byte[] input = readInputFile(inputFile);
// 创建Cipher对象,使用公钥进行加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 加密文件内容
byte[] encrypted = cipher.doFinal(input);
// 将加密后的内容写入到输出文件中
writeOutputFile(outputFile, encrypted);
System.out.println("Encryption completed successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
// 读取公钥
public static PublicKey readPublicKey(String fileName) throws Exception {
InputStream in = new FileInputStream(fileName);
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
try {
BigInteger m = (BigInteger) oin.readObject();
BigInteger e = (BigInteger) oin.readObject();
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey key = factory.generatePublic(keySpec);
return key;
} finally {
oin.close();
}
}
// 读取待加密的文件
public static byte[] readInputFile(String fileName) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();
return data;
}
// 将加密后的内容写入输出文件
public static void writeOutputFile(String fileName, byte[] data) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(data);
fos.close();
}
}
```
在上面的代码中,我们使用了 Java 内置的 RSA 算法进行加密。首先,我们需要读取公钥文件(public.key),然后使用公钥进行加密。加密后的内容将被写入到输出文件(output.enc)中。
当然,这只是一个简单的示例代码,实际应用中,我们还需要考虑很多细节,如密钥管理、加密算法的选择、加密模式、填充方式等。