I am using RSA algorithm for encryption and decryption of a file with size more than rsa key size.
In the code below for encryption, i am reading file content in block-wise and converting into cipher text. Block-size is 32 bytes.
FileInputStream fin1 = new FileInputStream(genfile);
FileOutputStream fout = new FileOutputStream(seedcipher);
byte[] block = new byte[32];
int i;
while ((i = fin1.read(block)) != -1)
{
byte[] inputfile= cipher.doFinal(block);
fout.write(inputfile);
}
fin1.close();
At decryption part, same block-wise decryption is done in the code where i have mentioned the block size as 128 bytes
FileInputStream fin1 = new FileInputStream(encryptedfile);
FileOutputStream fout = new FileOutputStream(seedcipher);
DataInputStream dos =new DataInputStream(fin1);
DataOutputStream dosnew =new DataOutputStream(fout);
byte[] block = new byte[128];
int i;
while ((i = fin1.read(block)) != -1)
{
byte[] inputfile= cipher.doFinal(block);
fout.write(inputfile);
}
Input file size is 81.3 kB and file contains
0 1 2 3 4.....29000
After the file is decrypted,output contain some extra values which are not relevant. why is that extra data in the result?
Your IO code for reading block by block is incorrect:
while ((i = fin1.read(block)) != -1) {
byte[] inputfile= cipher.doFinal(block);
fout.write(inputfile);
}
i). You should not ignore it.Using RSA to encrypt a large file is not a good idea. You could for example generate a random AES key, encrypt it using RSA and store it in the output file, and then encrypt the file itself with AES, which is much faster and doesn't have any problem with large inputs. The decryption would read the encrypted AES key, decrypt it, and then decrypt the rest of the file with AES.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With