Class PEMEncoder
PEMEncoder is a preview API of the Java platform.
PEMEncoder implements an encoder for Privacy-Enhanced Mail (PEM)
data. PEM is a textual encoding used to store and transfer security
objects, such as asymmetric keys, certificates, and certificate revocation
lists (CRL). It is defined in RFC 1421 and RFC 7468. PEM consists of a
Base64-formatted binary encoding enclosed by a type-identifying header
and footer.
Encoding may be performed on Java API cryptographic objects that
implement DEREncodablePREVIEW. The encode(DEREncodable)
and encodeToString(DEREncodable) methods encode a DEREncodable
into PEM and return the data in a byte array or String.
Private keys can be encrypted and encoded by configuring a
PEMEncoder with the withEncryption(char[]) method,
which takes a password and returns a new PEMEncoder instance
configured to encrypt the key with that password. Alternatively, a
private key encrypted as an EncryptedKeyInfo object can be encoded
directly to PEM by passing it to the encode or
encodeToString methods.
PKCS #8 2.0 defines the ASN.1 OneAsymmetricKey structure, which may
contain both private and public keys.
KeyPair objects passed to the encode or
encodeToString methods are encoded as a
OneAsymmetricKey structure using the "PRIVATE KEY" type.
When encoding a PEMRecordPREVIEW, the API surrounds the
PEMRecord.content()PREVIEW with the PEM header and footer
from PEMRecord.type()PREVIEW. PEMRecord.leadingData()PREVIEW is
not included in the encoding. PEMRecord will not perform
validity checks on the data.
The following lists the supported DEREncodable classes and
the PEM types that each are encoded as:
X509Certificate: CERTIFICATEX509CRL: X509 CRLPublicKey: PUBLIC KEYPrivateKey: PRIVATE KEYPrivateKey(if configured with encryption): ENCRYPTED PRIVATE KEYEncryptedPrivateKeyInfo: ENCRYPTED PRIVATE KEYKeyPair: PRIVATE KEYX509EncodedKeySpec: PUBLIC KEYPKCS8EncodedKeySpec: PRIVATE KEYPEMRecord:PEMRecord.type()
This class is immutable and thread-safe.
Here is an example of encoding a PrivateKey object:
PEMEncoder pe = PEMEncoder.of();
byte[] pemData = pe.encode(privKey);
Here is an example that encrypts and encodes a private key using the specified password:
PEMEncoder pe = PEMEncoder.of().withEncryption(password);
byte[] pemData = pe.encode(privKey);
- Implementation Note:
- An implementation may support other PEM types and
DEREncodableobjects. - Since:
- 25
- External Specifications
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionbyte[]Encodes the specifiedDEREncodableand returns the PEM encoding in a byte array.Encodes the specifiedDEREncodableand returns a PEM encoded string.static PEMEncoderPREVIEWof()Returns an instance ofPEMEncoder.withEncryption(char[] password) Returns a newPEMEncoderinstance configured for encryption with the default algorithm and a given password.
-
Method Details
-
of
-
encodeToString
Encodes the specifiedDEREncodableand returns a PEM encoded string.- Parameters:
de- theDEREncodableto be encoded- Returns:
- a
Stringcontaining the PEM encoded data - Throws:
IllegalArgumentException- if theDEREncodablecannot be encodedNullPointerException- ifdeisnull- See Also:
-
encode
Encodes the specifiedDEREncodableand returns the PEM encoding in a byte array.- Parameters:
de- theDEREncodableto be encoded- Returns:
- a PEM encoded byte array
- Throws:
IllegalArgumentException- if theDEREncodablecannot be encodedNullPointerException- ifdeisnull- See Also:
-
withEncryption
Returns a newPEMEncoderinstance configured for encryption with the default algorithm and a given password.Only
PrivateKeyobjects can be encrypted with this newly configured instance. Encoding otherDEREncodablePREVIEW objects will throw anIllegalArgumentException.- Implementation Note:
- The default password-based encryption algorithm is defined
by the
jdk.epkcs8.defaultAlgorithmsecurity property and uses the default encryption parameters of the provider that is selected. For greater flexibility with encryption options and parameters, useEncryptedPrivateKeyInfo.encryptKey(PrivateKey, Key, String, AlgorithmParameterSpec, Provider, SecureRandom)PREVIEW and use the returned object withencode(DEREncodable). - Parameters:
password- the encryption password. The array is cloned and stored in the new instance.- Returns:
- a new
PEMEncoderinstance configured for encryption - Throws:
NullPointerException- when password isnull
-
PEMEncoderwhen preview features are enabled.