Java Signature
Jakob Jenkov |
The Java Signature class (java.security.Signature
) can create a digital signature for
binary data. A digital signature is a message digest encrypted with a private key of a private / public key pair.
Anyone in possession of the public key can verify the digital signature.
Creating a Signature Instance
Before you can use the Java Signature
class you must create a Signature
instance.
You create a Signature
instance by calling the static getInstance()
method.
Here is an example that creates a Java Signature
instance:
Signature signature = Signature.getInstance("SHA256WithDSA");
The String passed as parameter to the getInstance()
method is the name of the digital
signature algorithm to use.
Initializing the Signature Instance
Once you have created the Java Signature
instance you need to initialize it before you
can use it. You initialize a Signature
instance by calling its init()
method.
Here is a Java Signature
initialization example:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
As you can see, the Signature
instance is initialized with the private key of a private / public
key pair, and a SecureRandom
instance.
Creating the Digital Signature
When the Signature
instance is initialized you can use it to create digital signatures.
You create a digital signature by calling the update()
method one or more times, finishing
with a call to sign()
. Here is an example of creating a digital signature for a block of binary data:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
Verifying the Digital Signature
If you want to verify a digital signature created by someone else, you must initialize a Signature
instance into verification mode (instead of signature mode). Here is how initializing a Signature
instance into verification mode looks:
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
Notice how the Java Signature
instance is now initialized into verification mode, passing
a public key of a public / private key pair as parameter.
Once initialized into verification mode you can use the Signature
instance to verify a
digital signature. Here is how verifying a digital signature looks:
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);
Tweet | |
Jakob Jenkov |