Автор оригинала: 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