Привет, Хабр! Представляю вашему вниманию перевод 6, 7 и 8 статей автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java. Класс KeyPair (java.security.KeyPair) представляет собой пару асимметричных ключей (открытый ключ + закрытый ключ). Экземпляр KeyPair обычно используется в асимметричной криптографии(шифрование или подпись данных). Обычно экземпляр KeyPair получают из хранилища ключей Java или KeyPairGenerator который будет рассмотрен далее в этой статье.  Вы можете получить доступ к открытому ключу экземпляра KeyPair, вызвав его метод getPublic(). Пример получения открытого ключа: Так же можно получить доступ к закрытому ключу экземпляра KeyPair, вызвав его метод getPrivate(). Вот пример получения закрытого ключа: Класс KeyGenerator (javax.crypto.KeyGenerator) используется для генерации симметричных ключей шифрования. Симметричный ключ шифрования — это ключ, который используется для шифрования и дешифрования данных алгоритмом симметричного шифрования.  Прежде чем вы сможете использовать класс KeyGenerator, вы должны создать экземпляр KeyGenerator. Экземпляр KeyGenerator создается вызывом статического метода getInstance(), в качестве параметра принимающего имя алгоритма шифрования, для которого создается ключ. Вот пример создания экземпляра KeyGenerator: В этом примере создается экземпляр KeyGenerator, который может генерировать ключи для алгоритма шифрования AES. После создания экземпляра KeyGenerator его необходимо инициализировать. Инициализация экземпляра выполняется путем вызова метода init(). Пример инициализации экземпляра KeyGenerator: Метод init() принимает два параметра: длина ключа и SecureRandom, который используется во время генерации ключа. После инициализации экземпляра KeyGenerator вы можете использовать его для генерации ключей. Генерация ключа выполняется путем вызова метода generateKey(). Вот пример генерации симметричного ключа: Класс KeyPairGenerator (java.security.KeyPairGenerator) используется для генерации асимметричных ключевых пар. Пара асимметричных ключей состоит из двух ключей: первый ключ обычно используется для шифрования данных, а второй ключ используется для расшифровки данных, зашифрованных с помощью первого ключа. Наиболее известным типом пары асимметричных ключей является тип пары ключей вида: открытый ключ + закрытый ключ. Закрытый ключ используется для шифрования данных, а открытый ключ — для расшифровки данных. На самом деле, вы также можете зашифровать данные с помощью открытого ключа и расшифровать его с помощью закрытого ключа. Закрытый ключ обычно хранится в секрете, а открытый ключ может быть известен всем. Таким образом, если Джек зашифровывает некоторые данные своим закрытым ключом, каждый, кто владеет открытым ключом Джека, может расшифровать его. Чтобы использовать KeyPairGenerator, вы должны сначала создать экземпляр класса KeyPairGenerator. Создание экземпляра KeyPairGenerator выполняется путем вызова метода getInstance(). Вот пример создания экземпляра: Метод getInstance() принимает имя алгоритма шифрования, который будет использоваться. В этом примере мы используем алгоритм RSA. В зависимости от алгоритма, вам может потребоваться инициализация экземпляра KeyPairGenerator. Инициализация KeyPairGenerator выполняется путем вызова его метода initialize(). Пример инициализации экземпляра KeyPairGenerator: В этом примере инициализируется KeyPairGenerator для генерации ключей размером 2048 бит. Чтобы сгенерировать ключевую пару с помощью KeyPairGenerator вызывается метод generateKeyPair(). Вот пример генерации ключевой пары: Программист