Автор оригинала: Pankaj Kumar.
Расширение криптографии Java ( JCE ) обеспечивает основу и реализацию для генерации ключа и шифрования/дешифрования данных с использованием различных алгоритмов. В этом уроке мы будем использовать реализацию Java DES для шифрования и дешифрования файла.
DES-это алгоритм блочного шифрования, в котором нам придется использовать один и тот же ключ для шифрования и дешифрования. Это один из основных методов шифрования. Это небезопасно, потому что нам нужно предоставить клиентскому приложению безопасный ключ для расшифровки данных.
Шаги дешифрования шифрования Java DES
- Прежде всего, нам нужно получить экземпляр
KeyGenerator
с использованием алгоритма DES. - Создайте
Безопасный ключ
(ключ), который будет использоваться для шифрования и дешифрования. - Получите
Шифр
экземпляр, используя алгоритм DES, один для режима шифрования, а другой для режима дешифрования. Инициализируйте объект шифрования с помощью ключа иIvParameterSpec
объект. - Для шифрования создайте объект
CipherOutputStream
, используя шифр шифрования. Для расшифровки создайте объектCipherInputStream
, используя шифр расшифровки. - Считайте входной поток и записывайте в выходной поток.
Приведенный ниже пример сначала зашифруйте файл и сохраните зашифрованные данные в новый файл. Затем он расшифровывает тот же файл, чтобы создать обычный текстовый файл.
package com.journaldev.des; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; public class DESEncryptionExample { private static Cipher encryptCipher; private static Cipher decryptCipher; private static final byte[] iv = { 11, 22, 33, 44, 99, 88, 77, 66 }; public static void main(String[] args) { String clearTextFile = "/Users/pankaj/source.txt"; String cipherTextFile = "/Users/pankaj/cipher.txt"; String clearTextNewFile = "/Users/pankaj/source-new.txt"; try { // create SecretKey using KeyGenerator SecretKey key = KeyGenerator.getInstance("DES").generateKey(); AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv); // get Cipher instance and initiate in encrypt mode encryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); encryptCipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); // get Cipher instance and initiate in decrypt mode decryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); decryptCipher.init(Cipher.DECRYPT_MODE, key, paramSpec); // method to encrypt clear text file to encrypted file encrypt(new FileInputStream(clearTextFile), new FileOutputStream(cipherTextFile)); // method to decrypt encrypted file to clear text file decrypt(new FileInputStream(cipherTextFile), new FileOutputStream(clearTextNewFile)); System.out.println("DONE"); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IOException e) { e.printStackTrace(); } } private static void encrypt(InputStream is, OutputStream os) throws IOException { // create CipherOutputStream to encrypt the data using encryptCipher os = new CipherOutputStream(os, encryptCipher); writeData(is, os); } private static void decrypt(InputStream is, OutputStream os) throws IOException { // create CipherOutputStream to decrypt the data using decryptCipher is = new CipherInputStream(is, decryptCipher); writeData(is, os); } // utility method to read data from input stream and write to output stream private static void writeData(InputStream is, OutputStream os) throws IOException { byte[] buf = new byte[1024]; int numRead = 0; // read and write operation while ((numRead = is.read(buf)) >= 0) { os.write(buf, 0, numRead); } os.close(); is.close(); } }
Как только программа завершится, вы можете проверить, что как обычный текстовый файл содержит одинаковые данные, так и зашифрованный файл не содержит обычных текстовых данных. Ниже приведено содержимое файлов из моих примеров файлов с выделенным зашифрованным текстом.
Дальнейшее чтение: Создание Java-программы CSR
Ссылки: Википедия и Архитектура криптографии Java