Factory Methods
The JCA makes extensive use of factory methods to supply instances
of its classes. The basic model is to ask a concept class for an
instance that implements a particular algorithm. For example, the
following code produces a MessageDigest
instance
that uses the MD5 algorithm:
MessageDigest md5; md5 = MessageDigest.getInstance("MD5");
Like all the factory methods in the JCA, this one will throw a
NoSuchAlgorithmException
if the requested
algorithm is not available.
The instance that is returned to you from a factory method is some
descendant of the class you asked for. But it doesn’t really
matter; this is one of the perks of object-oriented programming. The
preceding code might return a
sun.security.provider.MD5
, but you can do
everything you need to do by treating it as a
MessageDigest
.
The following concept classes have
getInstance()
methods:
javax.crypto.Cipher
javax.crypto.KeyAgreement
java.security.KeyFactory
javax.crypto.KeyGenerator
java.security.KeyPairGenerator
javax.crypto.Mac
java.security.MessageDigest
javax.crypto.SecretKeyFactory
java.security.Signature
These classes also have an overloaded version of
getInstance()
that accepts an algorithm name and a
provider name. I’ll discuss this in detail a little later.
Right now, I suggest you bask in the simplicity of this style of
programming. Changing algorithms is just as simple as changing the
argument to getInstance()
. You don’t have to know a thing about the algorithms themselves ...
Get Java Cryptography now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.