Шифрование, расшифровка AES для всех типов файлов в java - PullRequest
0 голосов
/ 13 июля 2020

как изменить этот код шифрования AES, чтобы он мог зашифровать и расшифровать любой тип файла (pdf, docx ....), потому что, когда я расшифровываю файл pdf или другой файл, я не получаю исходный файл.

public EncryptData(File originalFile, File encrypted, SecretKeySpec secretKey, String cipherAlgorithm) throws IOException, GeneralSecurityException{
    this.cipher = Cipher.getInstance(cipherAlgorithm);      
    encryptFile(getFileInBytes(originalFile), encrypted, secretKey);
}

public void encryptFile(byte[] input, File output, SecretKeySpec key) throws IOException, GeneralSecurityException {
    this.cipher.init(Cipher.ENCRYPT_MODE, key);
    writeToFile(output, this.cipher.doFinal(input));
}
public SecretKeySpec getSecretKey(String filename, String algorithm) throws IOException{
    byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
    return new SecretKeySpec(keyBytes, algorithm);
}

public static void main(String[] args) throws IOException, GeneralSecurityException, Exception{
    StartEncryption startEnc = new StartEncryption();
    File originalFile = new File("file.docx");
    File encryptedFile = new File("EncryptedFiles/encryptedFile");
    new EncryptData(originalFile, encryptedFile, startEnc.getSecretKey("OneKey/secretKey", "AES"), "AES");
}
public DecryptData(File encryptedFileReceived, File decryptedFile, SecretKeySpec secretKey, String algorithm) throws IOException, GeneralSecurityException {
    this.cipher = Cipher.getInstance(algorithm);
    decryptFile(getFileInBytes(encryptedFileReceived), decryptedFile, secretKey);
}

public void decryptFile(byte[] input, File output, SecretKeySpec key) throws IOException, GeneralSecurityException {
    this.cipher.init(Cipher.DECRYPT_MODE, key);
    writeToFile(output, this.cipher.doFinal(input));
}
public SecretKeySpec getSecretKey(String filename, String algorithm) throws IOException{
    byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
    return new SecretKeySpec(keyBytes, algorithm);
}

public static void main(String[] args) throws IOException, GeneralSecurityException, Exception{
    StartDecryption startEnc = new StartDecryption();
    
    File encryptedFileReceived = new File("EncryptedFiles/encryptedFile");
    File decryptedFile = new File("DecryptedFiles/decryptedFile");
    new DecryptData(encryptedFileReceived, decryptedFile, startEnc.getSecretKey("DecryptedFiles/SecretKey", "AES"), "AES");
    
}

1 Ответ

0 голосов
/ 14 июля 2020

Поскольку некоторая важная информация относительно вашего исходного кода отсутствует (метод writeToFile, нет информации о cipherAlgorithm, нет информации об используемом ключе) ваш код не является исполняемым .

Поэтому я Я предоставляю образец программы для шифрования и дешифрования любых файлов с использованием режима AES ECB.

Предупреждение безопасности: НЕ используйте режим AES ECB в производстве, потому что он НЕ БЕЗОПАСНЫЙ! Это лучше для использования такого режима, как AES GCM.

Укажите имена файлов для исходного файла (файл с открытым текстом), зашифрованного файла (файл ciphertextfile) и расшифрованного файла (файл decryptedfile) и запустите программу - расшифрованный файл равен исходный файл.

В этом примере я использую ключ stati c (длина ключа 32 байта / 256 бит) - для запуска этой программы вам нужны неограниченные криптографические политики, включенные в вашей системе Java.

Вот результат:

Код:

...