Below is a code snippet which will sign your request using Public key.
Which will output as below:
Signature=7GNccit4cY+rs4t/S0WBv.........+w1rYdiEO8PxuR3SQ=
package com.pkm.src; import Base64OutputStream; import IOUtil; import javax.crypto.Cipher; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.security.MessageDigest; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; /** * Created by pritom on 24/05/2017. */ public class SignatureSigner { public static void main(String[] args) throws Exception { String certificateFile = ".....\\publickey.cer"; String requestBody = "Param1=Value_Of_Param1&Param2=Value_Of_param2"; String signature = encodeRSASHA1(certificateFile, requestBody); System.out.println("Signature=" + signature); } protected static String encodeRSASHA1(String certificateFile, String requestBody) throws Exception { FileInputStream certIn1 = new FileInputStream(certificateFile); CertificateFactory e = CertificateFactory.getInstance("X509"); X509Certificate myCertificate = (X509Certificate) e.generateCertificate(certIn1); MessageDigest hashGen = MessageDigest.getInstance("SHA1"); byte[] hash = hashGen.digest(requestBody.getBytes("UTF-8")); Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding"); rsa.init(1, myCertificate); byte[] signature = rsa.doFinal(hash); ByteArrayInputStream sigIn = new ByteArrayInputStream(signature); ByteArrayOutputStream sigOut = new ByteArrayOutputStream(); Base64OutputStream base64Out = new Base64OutputStream(sigOut, ""); IOUtil.copy(sigIn, base64Out); base64Out.close(); return new String(sigOut.toByteArray(), "US-ASCII"); } }
Which will output as below:
Signature=7GNccit4cY+rs4t/S0WBv.........+w1rYdiEO8PxuR3SQ=