Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

RSASSA-PSS Sign String to Create Base64 PCKS7 Signature

See more Digital Signatures Examples

Signs a string to create a PKCS7 signature in the base64 encoding. The signature algorithm is RSASSA-PSS with SHA256.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.Cert;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;
import com.chilkatsoft.chilkat2.Pfx;

public class ChilkatExample {

    public static void main(String[] args) {
        boolean success = false;

        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        Crypt2 crypt = new Crypt2();

        // Get a digital certificate with private key from a .pfx
        // (Chilkat has many different ways to provide a cert + private key for siging.
        // Using a PFX is just one possible option.)
        Pfx pfx = new Pfx();
        try {
            pfx.loadPfxFile("qa_data/rsassa-pss/privatekey.pfx", "PFX_PASSWORD");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Get the certificate to be used for signing.
        // (The typical case for a PFX is that it contains a cert with an associated private key,
        // as well as other certificates in the chain of authentication.  The cert with the private
        // key should be in the first position at index 0.)

        Cert cert = new Cert();
        try {
            pfx.certAt(0, cert);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        crypt.setSigningCert(cert);

        // Indicate that RSASSA-PSS with SHA256 should be used.
        crypt.setSigningAlg("pss");
        crypt.setHashAlgorithm("sha256");

        crypt.setEncodingMode("base64");

        // Sign a string and return the base64 PKCS7 detached signature
        String originalText = "This is a test";
        String pkcs7sig = crypt.signStringENC(originalText);
        System.out.println("Detached Signature:");
        System.out.println(pkcs7sig);

        // This signature looks like this:
        // MIIG5wYJKoZIhvcNAQcCoIIG2DCCBtQCAQExDzANBgl .. YToLqEwTdU87ox5g7rvw==

        // The ASN.1 of the signature can be examined by browsing to https://lapo.it/asn1js/ ,
        // then copy-and-paste the Base64 signature into the form and decode..

        // The signature can be verified against the original data like this:
        try {
            crypt.verifyStringENC(originalText, pkcs7sig);
            success = true;
        } catch (ChilkatException e) {
            success = false;
        }
        System.out.println("Signature verified: " + success);
        try {
            crypt.verifyStringENC("Not the original text", pkcs7sig);
            success = true;
        } catch (ChilkatException e) {
            success = false;
        }
        System.out.println("Signature verified: " + success);

        // Now we'll create an opaque signature (the opposite of a detached signature).
        // An opaque signature is a PKCS7 message that contains both the original data and
        // the signature.  The verification process extracts the original data.
        String opaqueSig = crypt.opaqueSignStringENC(originalText);
        System.out.println("Opaque Signature:");
        System.out.println(opaqueSig);

        // The ASN.1 of the signature can be examined by browsing to https://lapo.it/asn1js/ ,
        // then copy-and-paste the Base64 signature into the form and decode..

        // We can verify and extract the original data:
        String origTxt;
        try {
            origTxt = crypt.opaqueVerifyStringENC(opaqueSig);
        } catch (ChilkatException e) {
            System.out.println("Signature verification failed.");
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("Signature verified.");
        System.out.println("Extracted text:" + origTxt);
    }
}