In this example we will learn how to verify the digital signature of the previously signed data. To sign the data you can see the previous example on this post How to create a digital signature and sign data?.
Here the code snippet:
package org.kodejava.security;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;
public class VerifyDigitalSignature {
public static void main(String[] args) {
try {
byte[] publicKeyEncoded = Files.readAllBytes(Paths.get("publickey"));
byte[] digitalSignature = Files.readAllBytes(Paths.get("signature"));
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyEncoded);
KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
Signature signature = Signature.getInstance("SHA1withDSA", "SUN");
signature.initVerify(publicKey);
byte[] bytes = Files.readAllBytes(Paths.get("README.md"));
signature.update(bytes);
boolean verified = signature.verify(digitalSignature);
if (verified) {
System.out.println("Data verified.");
} else {
System.out.println("Cannot verify data.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Latest posts by Wayan (see all)
- How do I handle cookies using Jakarta Servlet API? - April 19, 2025
- How do I set response headers with HttpServletResponse? - April 18, 2025
- How do I apply gain and balance using FloatControl? - April 18, 2025
The above code couldn’t run in my system.
Gave
java.security.spec.InvalidKeySpecException: Inappropriate key specification: IOException: DerInputStream.getLength(): lengthTag=111, too big.
At line >> PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
Hi Subuhi, you might also want to check the following example How to create a digital signature and sign data?