Криптография в Java. Класс KeyPair +4


Привет, Хабр! Представляю вашему вниманию перевод 6, 7 и 8 статей автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.


Оглавление:


  1. Java Cryptography
  2. Java Cipher
  3. MessageDigest
  4. Mac
  5. Signature
  6. KeyPair
  7. KeyGenerator
  8. KeyPairGenerator
  9. KeyStore
  10. Keytool
  11. Certificate
  12. CertificateFactory
  13. CertPath

Ключевая пара


Класс KeyPair (java.security.KeyPair) представляет собой пару асимметричных ключей (открытый ключ + закрытый ключ). Экземпляр KeyPair обычно используется в асимметричной криптографии(шифрование или подпись данных). Обычно экземпляр KeyPair получают из хранилища ключей Java или KeyPairGenerator который будет рассмотрен далее в этой статье.


Доступ к открытому ключу


Вы можете получить доступ к открытому ключу экземпляра KeyPair, вызвав его метод getPublic(). Пример получения открытого ключа:


PublicKey publicKey = keyPair.getPublic();

Доступ к закрытому ключу


Так же можно получить доступ к закрытому ключу экземпляра KeyPair, вызвав его метод getPrivate(). Вот пример получения закрытого ключа:


PrivateKey privateKey = keyPair.getPrivate();

Генератор ключей


Класс KeyGenerator (javax.crypto.KeyGenerator) используется для генерации симметричных ключей шифрования. Симметричный ключ шифрования — это ключ, который используется для шифрования и дешифрования данных алгоритмом симметричного шифрования.


Создание экземпляра KeyGenerator


Прежде чем вы сможете использовать класс KeyGenerator, вы должны создать экземпляр KeyGenerator. Экземпляр KeyGenerator создается вызывом статического метода getInstance(), в качестве параметра принимающего имя алгоритма шифрования, для которого создается ключ. Вот пример создания экземпляра KeyGenerator:


KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

В этом примере создается экземпляр KeyGenerator, который может генерировать ключи для алгоритма шифрования AES.


Инициализация KeyGenerator


После создания экземпляра KeyGenerator его необходимо инициализировать. Инициализация экземпляра выполняется путем вызова метода init(). Пример инициализации экземпляра KeyGenerator:


SecureRandom secureRandom = new SecureRandom();
int keyBitSize = 256;

keyGenerator.init(keyBitSize, secureRandom);

Метод init() принимает два параметра: длина ключа и SecureRandom, который используется во время генерации ключа.


Генерация ключа


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


SecretKey secretKey = keyGenerator.generateKey();

Генератор ключевой пары


Класс KeyPairGenerator (java.security.KeyPairGenerator) используется для генерации асимметричных ключевых пар. Пара асимметричных ключей состоит из двух ключей: первый ключ обычно используется для шифрования данных, а второй ключ используется для расшифровки данных, зашифрованных с помощью первого ключа.


Открытые и закрытые ключи


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


Создание экземпляра KeyPairGenerator


Чтобы использовать KeyPairGenerator, вы должны сначала создать экземпляр класса KeyPairGenerator. Создание экземпляра KeyPairGenerator выполняется путем вызова метода getInstance(). Вот пример создания экземпляра:


KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

Метод getInstance() принимает имя алгоритма шифрования, который будет использоваться. В этом примере мы используем алгоритм RSA.


Инициализация KeyPairGenerator


В зависимости от алгоритма, вам может потребоваться инициализация экземпляра KeyPairGenerator. Инициализация KeyPairGenerator выполняется путем вызова его метода initialize(). Пример инициализации экземпляра KeyPairGenerator:


keyPairGenerator.initialize(2048);

В этом примере инициализируется KeyPairGenerator для генерации ключей размером 2048 бит.


Генерация ключевой пары


Чтобы сгенерировать ключевую пару с помощью KeyPairGenerator вызывается метод generateKeyPair(). Вот пример генерации ключевой пары:


KeyPair keyPair = keyPairGenerator.generateKeyPair();




К сожалению, не доступен сервер mySQL