Рубрики
Без рубрики

Пример гибридной криптографии на Java

– Java – Пример гибридной криптографии

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

Наиболее распространенной методологией гибридной криптографии является шифрование данных с использованием симметричного ключа, который затем будет зашифрован с помощью Закрытого ключа отправителя или Открытого ключа получателя. Для расшифровки получателю придется сначала расшифровать Симметричный ключ с помощью соответствующего Асимметричного ключа, а затем использовать этот симметричный ключ для расшифровки полученных данных. Этот пример может помочь прояснить, что:

Представьте себе сценарий с двумя пользователями, Алисой и Бобом, которые уже обменялись открытыми ключами. Алиса хочет отправить Бобу текстовый файл под названием”confidential.txt “. Шаги, которые она выполнит для шифрования своего сообщения, следующие:

  1. Генерирует новый симметричный ключ с использованием сильного алгоритма
  2. Шифрует”confidential.txt “используя ключ из шага 1
  3. Шифрует ключ с шага 1, используя открытый ключ Боба
  4. Отправляет как зашифрованный текст, так и ключ Бобу

Боб получает два файла. Шаги, которые он выполнит для их расшифровки, заключаются в следующем:

  1. Расшифровывает полученный им ключ, используя свой собственный Закрытый ключ
  2. Расшифровывает текст, который он получил, используя ключ, полученный на шаге 1 после расшифровки

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

1. Каталог проектов

2. Генерировать ключи для Алисы и Боба

Существует несколько способов создания пары открытого и закрытого ключей в зависимости от вашей платформы. В этом примере мы создадим две пары, одну для Алисы и одну для Боба, используя java. Криптографический алгоритм, который мы будем использовать в этом примере, – это RSA.

package com.mkyong.keypair;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;

public class GenerateKeys {

    private KeyPairGenerator keyGen;
    private KeyPair pair;
    private PrivateKey privateKey;
    private PublicKey publicKey;

    public GenerateKeys(int keylength) 
        throws NoSuchAlgorithmException, NoSuchProviderException {

        this.keyGen = KeyPairGenerator.getInstance("RSA");
        this.keyGen.initialize(keylength);

    }

    public void createKeys() {

        this.pair = this.keyGen.generateKeyPair();
        this.privateKey = pair.getPrivate();
        this.publicKey = pair.getPublic();

    }

    public PrivateKey getPrivateKey() {
        return this.privateKey;
    }

    public PublicKey getPublicKey() {
        return this.publicKey;
    }

    public void writeToFile(String path, byte[] key) throws IOException {

        File f = new File(path);
        f.getParentFile().mkdirs();

        FileOutputStream fos = new FileOutputStream(f);
        fos.write(key);
        fos.flush();
        fos.close();

    }

    public static void main(String[] args) 
                throws NoSuchAlgorithmException, NoSuchProviderException, IOException {

        GenerateKeys gk_Alice;
        GenerateKeys gk_Bob;

        gk_Alice = new GenerateKeys(1024);
        gk_Alice.createKeys();
        gk_Alice.writeToFile("KeyPair/publicKey_Alice", gk_Alice.getPublicKey().getEncoded());
        gk_Alice.writeToFile("KeyPair/privateKey_Alice", gk_Alice.getPrivateKey().getEncoded());

        gk_Bob = new GenerateKeys(1024);
        gk_Bob.createKeys();
        gk_Bob.writeToFile("KeyPair/publicKey_Bob", gk_Bob.getPublicKey().getEncoded());
        gk_Bob.writeToFile("KeyPair/privateKey_Bob", gk_Bob.getPrivateKey().getEncoded());

    }

}

Выход:

3. Алиса генерирует Симметричный ключ

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о

package com.mkyong.onekey;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class GenerateSymmetricKey {

    private SecretKeySpec secretKey;

    public GenerateSymmetricKey(int length, String algorithm) 
        throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException {

        SecureRandom rnd = new SecureRandom();
        byte [] key = new byte [length];
        rnd.nextBytes(key);
        this.secretKey = new SecretKeySpec(key, algorithm);

    }

    public SecretKeySpec getKey(){
        return this.secretKey;
    }

    public void writeToFile(String path, byte[] key) throws IOException {

        File f = new File(path);
        f.getParentFile().mkdirs();

        FileOutputStream fos = new FileOutputStream(f);
        fos.write(key);
        fos.flush();
        fos.close();

    }

    public static void main(String[] args) 
        throws NoSuchAlgorithmException, NoSuchPaddingException, IOException {

        GenerateSymmetricKey genSK = new GenerateSymmetricKey(16, "AES");
        genSK.writeToFile("OneKey/secretKey", genSK.getKey().getEncoded());

    }
}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Вывод: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

4. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 CoAlice пишет свое сообщение Вывод: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

5. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается хорошим решением. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 CoAlice шифрует данные, Алиса пишет свое сообщение Вывод: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption содержит три метода GetPrivate() , getpublic() , getsecretkey()

package com.mkyong.hybrid.encrypt;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.spec.SecretKeySpec;

public class StartEncryption {

    public PrivateKey getPrivate(String filename, String algorithm) throws Exception {

        byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePrivate(spec);

    }

    public PublicKey getPublic(String filename, String algorithm) throws Exception {

        byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePublic(spec);

    }

    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 originalKeyFile = new File("OneKey/secretKey");
        File encryptedKeyFile = new File("EncryptedFiles/encryptedSecretKey");
        new EncryptKey(startEnc.getPublic("KeyPair/publicKey_Bob", "RSA"), 
                originalKeyFile, encryptedKeyFile, "RSA");

        File originalFile = new File("confidential.txt");
        File encryptedFile = new File("EncryptedFiles/encryptedFile");
        new EncryptData(originalFile, encryptedFile, 
                startEnc.getSecretKey("OneKey/secretKey", "AES"), "AES");

    }

}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption содержит три метода GetPrivate()

package com.mkyong.hybrid.encrypt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;

public class EncryptData {

    private Cipher cipher;

    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));

    }

    private void writeToFile(File output, byte[] toWrite) 
        throws IllegalBlockSizeException, BadPaddingException, IOException{

        output.getParentFile().mkdirs();
        FileOutputStream fos = new FileOutputStream(output);
        fos.write(toWrite);
        fos.flush();
        fos.close();
        System.out.println("The file was successfully encrypted and stored in: " + output.getPath());

    }

    public byte[] getFileInBytes(File f) throws IOException{

        FileInputStream fis = new FileInputStream(f);
        byte[] fbytes = new byte[(int) f.length()];
        fis.read(fbytes);
        fis.close();
        return fbytes;

    }

}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption содержит три метода GetPrivate()

package com.mkyong.hybrid.encrypt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.PublicKey;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;

public class EncryptKey {

    private Cipher cipher;

    public EncryptKey(PublicKey key, File originalKeyFile, File encryptedKeyFile, String cipherAlgorithm) 
        throws IOException, GeneralSecurityException{

        this.cipher = Cipher.getInstance(cipherAlgorithm);
        encryptFile(getFileInBytes(originalKeyFile), encryptedKeyFile, key);

    }

    public void encryptFile(byte[] input, File output, PublicKey key) 
        throws IOException, GeneralSecurityException {

        this.cipher.init(Cipher.ENCRYPT_MODE, key);
        writeToFile(output, this.cipher.doFinal(input));

    }

    private void writeToFile(File output, byte[] toWrite) 
        throws IllegalBlockSizeException, BadPaddingException, IOException{

        output.getParentFile().mkdirs();
        FileOutputStream fos = new FileOutputStream(output);
        fos.write(toWrite);
        fos.flush();
        fos.close();
        System.out.println("The key was successfully encrypted and stored in: " + output.getPath());

    }

    public byte[] getFileInBytes(File f) throws IOException{

        FileInputStream fis = new FileInputStream(f);
        byte[] fbytes = new byte[(int) f.length()];
        fis.read(fbytes);
        fis.close();
        return fbytes;

    }

}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс ||StartEncryption|| содержит три метода ||GetPrivate()||, ||getpublic()||, ||getsecretkey()||, которые используются в основном методе для создания соответствующих ключей из файлов. Алиса шифрует данные, Алиса записывает вывод своего сообщения: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

The key was successfully encrypted and stored in: EncryptedFiles\encryptedSecretKey
The file was successfully encrypted and stored in: EncryptedFiles\encryptedFile

6. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс ||StartEncryption|| содержит три метода ||GetPrivate()||, ||getpublic()||, ||getsecretkey()||, которые используются в основном методе для создания соответствующих ключей из файлов. Алиса шифрует данные, Алиса записывает вывод своего сообщения: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption содержит три метода GetPrivate() , getpublic() , getsecretkey()

package com.mkyong.hybrid.decrypt;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.spec.SecretKeySpec;

public class StartDecryption {

    public PrivateKey getPrivate(String filename, String algorithm) throws Exception {

        byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePrivate(spec);

    }

    public PublicKey getPublic(String filename, String algorithm) throws Exception {

        byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePublic(spec);

    }

    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 encryptedKeyReceived = new File("EncryptedFiles/encryptedSecretKey");
        File decreptedKeyFile = new File("DecryptedFiles/SecretKey");
        new DecryptKey(startEnc.getPrivate("KeyPair/privateKey_Bob", "RSA"),
                encryptedKeyReceived, decreptedKeyFile, "RSA");

        File encryptedFileReceived = new File("EncryptedFiles/encryptedFile");
        File decryptedFile = new File("DecryptedFiles/decryptedFile");
        new DecryptData(encryptedFileReceived, decryptedFile, 
                startEnc.getSecretKey("DecryptedFiles/SecretKey", "AES"), "AES");

    }
}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption содержит три метода GetPrivate()

package com.mkyong.hybrid.decrypt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.PrivateKey;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;

public class DecryptKey {

    private Cipher cipher;

    public DecryptKey(PrivateKey privateKey, File encryptedKeyReceived, File decreptedKeyFile, String algorithm) 
        throws IOException, GeneralSecurityException {

        this.cipher = Cipher.getInstance(algorithm);
        decryptFile(getFileInBytes(encryptedKeyReceived), decreptedKeyFile, privateKey);

    }

    public void decryptFile(byte[] input, File output, PrivateKey key) 
        throws IOException, GeneralSecurityException {

        this.cipher.init(Cipher.DECRYPT_MODE, key);
        writeToFile(output, this.cipher.doFinal(input));

    }

    private void writeToFile(File output, byte[] toWrite) 
        throws IllegalBlockSizeException, BadPaddingException, IOException{

        output.getParentFile().mkdirs();
        FileOutputStream fos = new FileOutputStream(output);
        fos.write(toWrite);
        fos.flush();
        fos.close();

    }

    public byte[] getFileInBytes(File f) throws IOException{

        FileInputStream fis = new FileInputStream(f);
        byte[] fbytes = new byte[(int) f.length()];
        fis.read(fbytes);
        fis.close();
        return fbytes;

    }

}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует SecureRandom для добавления случайности в ключ. Для получения дополнительной информации о SecureRandom обратитесь к Java – Как создавать сильные случайные числа . Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс StartEncryption

package com.mkyong.hybrid.decrypt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;

public class DecryptData {

    private Cipher cipher;

    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));

    }

    private void writeToFile(File output, byte[] toWrite) 
        throws IllegalBlockSizeException, BadPaddingException, IOException{

        output.getParentFile().mkdirs();
        FileOutputStream fos = new FileOutputStream(output);
        fos.write(toWrite);
        fos.flush();
        fos.close();
        System.out.println("The file was successfully decrypted. You can view it in: " + output.getPath());

    }

    public byte[] getFileInBytes(File f) throws IOException{

        FileInputStream fis = new FileInputStream(f);
        byte[] fbytes = new byte[(int) f.length()];
        fis.read(fbytes);
        fis.close();
        return fbytes;

    }

}

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс ||StartEncryption|| содержит три метода ||GetPrivate()||, ||getpublic()||, ||getsecretkey()||, которые используются в основном методе для создания соответствующих ключей из файлов. Алиса шифрует данные, Алиса записывает вывод своего сообщения: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

The file was successfully decrypted. You can view it in: DecryptedFiles\decryptedFile

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс ||StartEncryption|| содержит три метода ||GetPrivate()||, ||getpublic()||, ||getsecretkey()||, которые используются в основном методе для создания соответствующих ключей из файлов. Алиса шифрует данные, Алиса записывает вывод своего сообщения: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует ||SecureRandom|| для добавления случайности в ключ. Для получения дополнительной информации о ||SecureRandom || обратитесь к ||Java – Как создавать сильные случайные числа ||. Конструктор инициализируется путем к каталогу, в котором будет сохранен ключ, длиной ключа и т. Д. Чтобы узнать больше о длинах ключей для каждого алгоритма, обратитесь к |В этом примере мы используем AES, поскольку это считается положительным моментом. Если вы хотите узнать больше об алгоритмах шифрования, обратитесь к ||Анализ производительности алгоритмов шифрования данных: 2.5 Co5.1 Класс ||StartEncryption|| содержит три метода ||GetPrivate()||, ||getpublic()||, ||getsecretkey()||, которые используются в основном методе для создания соответствующих ключей из файлов. Алиса шифрует данные, Алиса записывает вывод своего сообщения: Алгоритмы mpared || . между скоростью и безопасностью. | Ограничения на импорт криптографических алгоритмов ||. алгоритм, который будет использоваться для его создания.

  1. С помощью приведенного ниже кода вы можете сгенерировать симметричный ключ. Код использует
  2. SecureRandom
  3. для добавления случайности в ключ. Для получения дополнительной информации о
  4. SecureRandom
  5. обратитесь к

Оригинал: “https://mkyong.com/java/java-hybrid-cryptography-example/”