Шифрование и дешифрование с помощью симметричных

Шифрование и дешифрование можно сделать симметричной — здесь и тот же ключ используется для шифрования и дешифрования данных. Потому что обе стороны имеют тот же ключ, расшифровка по существу производится путем обращения вспять некоторую часть процесса шифрования. Алгоритмом Blowfish является примером симметричного ключа. Она поддерживается Java Cryptography Extension (ОКО). Вы можете найти в соответствующих API для javax.crypto .* пакетах. В дополнение к Blowfish, примеры алгоритмов шифрования поддерживаемых в настоящее время являются ОКО Digital Encryption Standard (DES), Triple DES шифрование (DESede), а также на основе пароля, алгоритм шифрования (PBEWithMD5AndDES).

Симметричный алгоритм Key, как правило, гораздо быстрее, чем асимметричные ключевые алгоритмы. Кроме того, как вы видели в первый отзыв, размер текста, который может быть зашифрован, зависит от размера произведения двух простых чисел, используемый для создания открытых и закрытых ключей. С симметричными алгоритмами ключевую у вас нет ограничений на общий размер, что может быть зашифрована. Хотя, в зависимости от алгоритмов симметричного шифрования, общий размер входного должна быть кратна размеров блоков и, возможно, потребует прокладки. Проблема с симметричными ключами, что ключи должны распределяться между сторонами, участвующими в шифрования или расшифрования. Поэтому есть опасность перехвата или несанкционированного обмена.

Вы можете создать симметричный ключ, сколько вам создать пару ключей. Вы используете метод фабрики из класса KeyGenerator и передать в алгоритме в виде строки. Когда вы звоните generateKey () метод, вы получите обратно объект, который реализует ключевые интерфейс вместо интерфейса ключей. Призыв выглядит примерно так:


   SecretKey key =

         KeyGenerator.getInstance("DES").generateKey();

Далее вам необходимо создать Cipher. Это рабочая лошадка для ОКО. Вы снова использовать метод фабрики класса Cipher так что вы можете воспользоваться различными поставщиками без изменения приложений. Вы можете создать Cipher следующим образом:


   Cipher cipher = Cipher.getInstance("DES");

Шифрования используется для шифрования и дешифрования данных, которые передаются в виде байт-массивы. Двух основных методов, которые вы должны использовать являются Init (), чтобы указать, какие операции будет называться, и doFinal (), для выполнения этой операции. Например, следующие две строки использовать шифр и ключевые случаев вы создали, чтобы зашифровать массив байтов называется textBytes. Результат сохраняется в массиве байт называется encryptedBytes.


   cipher.init(Cipher.ENCRYPT_MODE, key);

   byte[] encryptedBytes =

      cipher.doFinaltextBytes );

Полагая это вместе, следующая программа принимает входную строку и шифрует ее. Зашифрованная строка затем расшифрованы.


   import javax.crypto.Cipher;

   import javax.crypto.BadPaddingException;

   import javax.crypto.IllegalBlockSizeException;

   import javax.crypto.KeyGenerator;

   import java.security.Key;

   import java.security.InvalidKeyException;



   public class LocalEncrypter {



        private static String algorithm = "DESede";

        private static Key key = null;

        private static Cipher cipher = null;



        private static void setUp() throws Exception {

            key = KeyGenerator.getInstance(algorithm).generateKey();

            cipher = Cipher.getInstance(algorithm);

        }



        public static void main(String[] args

           throws Exception {

            setUp();

            if (args.length !=1) {

                System.out.println(

                  "USAGE: java LocalEncrypter " +

                                         "[String]");

                System.exit(1);

            }

            byte[] encryptionBytes = null;

            String input = args[0];

            System.out.println("Entered: " + input);

            encryptionBytes = encrypt(input);

            System.out.println(

              "Recovered: " + decrypt(encryptionBytes));

        }



        private static byte[] encrypt(String input)

            throws InvalidKeyException, 

                   BadPaddingException,

                   IllegalBlockSizeException {

            cipher.init(Cipher.ENCRYPT_MODE, key);

            byte[] inputBytes = input.getBytes();

            return cipher.doFinal(inputBytes);

        }



        private static String decrypt(byte[] encryptionBytes)

            throws InvalidKeyException, 

                   BadPaddingException,

                   IllegalBlockSizeException {

            cipher.init(Cipher.DECRYPT_MODE, key);

            byte[] recoveredBytes = 

              cipher.doFinal(encryptionBytes);

            String recovered = 

              new String(recoveredBytes);

            return recovered;

          }

   }

Вы можете ввести любой текст, который вы хотели в качестве параметра командной строки. Например, если вы отправите на следующую командную строку:

java LocalEncrypter "Whatever phrase we would like to
input at this point"

Вы должны увидеть нечто подобное в качестве вывода:

Entered: Whatever phrase we would like to
input at this point
Recovered: Whatever phrase we would like to
input at this point

В этом примере, как шифрование и расшифровка было сделано с той же ключевой объект. Шифрование и дешифрование обычно происходит на разных виртуальных машинах в разное время, поэтому вам нужен метод для безопасной транспортировки ключа.

В первый отзыв вы научились генерировать пары ключей для асимметричных алгоритмов шифра. Во второй отзыв, были использованы симметричными ключами. Вот другой техники, которая сочетает в себе асимметричных и симметричных ключей. В этой технике симметричный ключ выбран случайным образом и используется для шифрования некоторых данных. Ключевые само затем шифруется с помощью открытого ключа другой стороны. Получатель использует свой секретный ключ для расшифровки с симметричным ключом, а затем использует этот расшифрованный ключ для расшифровки сообщения. Модуль используется в асимметричной технике нужно только быть достаточно большим для шифрования симметричного ключа. Симметричный ключ используется для одной передачи, а затем отбрасывается. Таким образом, устраняются недостатки каждого типа.

Вы можете узнать больше о:

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>