要在Java中实现RSA加密和解密文件,可以使用Java Cryptography Architecture(JCA)提供的RSA算法。以下是一个简单的示例代码,用于加密和解密文件。
-
导入必要的类和包:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Security; import javax.crypto.Cipher; import org.bouncycastle.jce.provider.BouncyCastleProvider;
-
添加Bouncy Castle作为JCA的提供者:
Security.addProvider(new BouncyCastleProvider());
-
生成RSA密钥对:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "BC"); keyGen.initialize(2048); KeyPair keyPair = keyGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic();
-
加密文件:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); FileInputStream inputFile = new FileInputStream("input.txt"); FileOutputStream outputFile = new FileOutputStream("encrypted.txt"); byte[] inputBytes = new byte[245]; int bytesRead; while ((bytesRead = inputFile.read(inputBytes)) != -1) { byte[] outputBytes = cipher.doFinal(inputBytes, 0, bytesRead); outputFile.write(outputBytes); }
-
解密文件:
cipher.init(Cipher.DECRYPT_MODE, privateKey); inputFile = new FileInputStream("encrypted.txt"); outputFile = new FileOutputStream("decrypted.txt"); byte[] encryptedBytes = new byte[256]; while ((bytesRead = inputFile.read(encryptedBytes)) != -1) { byte[] decryptedBytes = cipher.doFinal(encryptedBytes, 0, bytesRead); outputFile.write(decryptedBytes); }
请注意,上述代码使用Bouncy Castle作为JCA的提供者,并假设输入文件名为"input.txt",加密后的文件名为"encrypted.txt",解密后的文件名为"decrypted.txt"。此外,还假设输入文件不超过245个字节,加密后的文件长度为256个字节。您可以根据实际需要进行修改。