java加密文件放服务器,java - 将文件转换为加密文件并在服务器上解密(使用公钥加密) - 堆栈内存溢出...

我正在尝试使用RSA加密/解密文件。 但是我看不到文件中的数据。

这是代码:

// To encrypt a file

private static void encrypt(InputStream input, OutputStream output, PublicKey key)

throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {

final Cipher encrypt = Cipher.getInstance(ALGORITHM);

// encrypt the plain text using the public key

encrypt.init(Cipher.ENCRYPT_MODE, key);

// encrypt.doFinal();

output = new CipherOutputStream(output,encrypt);

writeBytes(input, output, encrypt);

output.close();

}

// To decrypt the file

private static void decrypt(InputStream input, OutputStream output, PrivateKey key)

throws IOException,NoSuchAlgorithmException,InvalidKeyException,NoSuchPaddingException,BadPaddingException,IllegalBlockSizeException {

final Cipher decrypt = Cipher.getInstance(ALGORITHM);

// decrypt the text using the private key

decrypt.init(Cipher.DECRYPT_MODE, key);

input = new CipherInputStream(input, decrypt);

writeBytes(input, output, decrypt);

input.close();

}

// To write on the file from the inputstream

private static void writeBytes(InputStream input, OutputStream output, Cipher cipher)

throws IOException, IllegalBlockSizeException,BadPaddingException {

byte[] writeBuffer = new byte[512];

int readBytes = 0;

while ((readBytes = input.read(writeBuffer)) >= 0) {

System.out.println(readBytes);

// String text = input.read(writeBuffer);

// cipher.doFinal();

try{

System.out.println("Here");

output.write(writeBuffer, 0, readBytes);

}

catch(Exception e){

e.printStackTrace();

}

}

output.close();

input.close();

}

主功能 :

// Check if the pair of keys are present else generate those.

if (!areKeysPresent()) {

// Method generates a pair of keys using the RSA algorithm and stores it

// in their respective files

generateKey();

}

final String originalText = "Text to be encrypted ";

ObjectInputStream inputStream = null;

String clearFile = "/UploadFile/Log.txt";

String encryptedFile = "/UploadFile/LogE.txt";

String decryptedFile = "/UploadFile/LogD.txt";

// Encrypt the string using the public key

inputStream = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));

final PublicKey publicKey = (PublicKey) inputStream.readObject();

// final byte[] cipherText = encrypt(originalText, publicKey);

encrypt(new FileInputStream(clearFile), new FileOutputStream(encryptedFile), publicKey);

System.out.println("Successfully Encrypted");

}

// Decrypt the cipher text using the private key.

inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));

final PrivateKey privateKey = (PrivateKey) inputStream.readObject();

// final String plainText = decrypt(cipherText, privateKey);

decrypt(new FileInputStream(encryptedFile), new FileOutputStream(decryptedFile), privateKey);

System.out.println("Successfully Decrypted");

GenerateKey Function :

public static void generateKey() {

try {

final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);

keyGen.initialize(1024);

final KeyPair key = keyGen.generateKeyPair();

File privateKeyFile = new File(PRIVATE_KEY_FILE);

File publicKeyFile = new File(PUBLIC_KEY_FILE);

// Create files to store public and private key

if (privateKeyFile.getParentFile() != null) {

privateKeyFile.getParentFile().mkdirs();

}

privateKeyFile.createNewFile();

if (publicKeyFile.getParentFile() != null) {

publicKeyFile.getParentFile().mkdirs();

}

publicKeyFile.createNewFile();

// Saving the Public key in a file

ObjectOutputStream publicKeyOS = new ObjectOutputStream(

new FileOutputStream(publicKeyFile));

publicKeyOS.writeObject(key.getPublic());

publicKeyOS.close();

// Saving the Private key in a file

ObjectOutputStream privateKeyOS = new ObjectOutputStream(

new FileOutputStream(privateKeyFile));

privateKeyOS.writeObject(key.getPrivate());

privateKeyOS.close();

} catch (Exception e) {

e.printStackTrace();

}

}

我在加密和解密文件中都没有得到任何数据。

clearFile是原始数据文件,encryptedFile是加密数据,decryptedFile是解密数据。

请帮助,我在这里想念的。