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

RSA SHA256 Signature using Private Key from Java Keystore

See more RSA Examples

Signs plaintext using RSA SHA256 using a key from a Java keystore.

Duplicatest this code:

KeyStore keystore; // key repository for keys containing signature certificate
String alias; // alias for the certificate in the key repository
String password; // password for the certificate's private key
String plaintext; // text being signed


Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign((PrivateKey) keystore.getKey(alias, password.toCharArray()));
signature.update(plaintext.getBytes("UTF-8"));
byte[] rsa_text= signature.sign();

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoJks
    String sJksPassword
    String sPrivKeyPassword
    Boolean iCaseSensitive
    Variant vPrivKey
    Handle hoPrivKey
    Handle hoRsa
    Variant hoBinarySignature
    String sPlaintext
    String sSignatureStr
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

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

    Get Create (RefClass(cComChilkatJavaKeyStore)) To hoJks
    If (Not(IsComObjectCreated(hoJks))) Begin
        Send CreateComObject of hoJks
    End

    Move "secret" To sJksPassword

    //  Load the Java keystore from a file.  The JKS file password is used
    //  to verify the keyed digest that is found at the very end of the keystore.
    //  It verifies that the keystore has not been modified.
    Get ComLoadFile Of hoJks sJksPassword "qa_data/jks/sample_secret.jks" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJks To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Get the private key from the JKS.
    //  The private key password may be different than the file password.
    Move "secret" To sPrivKeyPassword
    Move False To iCaseSensitive
    Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey
    If (Not(IsComObjectCreated(hoPrivKey))) Begin
        Send CreateComObject of hoPrivKey
    End
    Get pvComObject of hoPrivKey to vPrivKey
    Get ComPrivateKeyOf Of hoJks sPrivKeyPassword "some.alias" iCaseSensitive vPrivKey To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJks To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Establish the RSA object and tell it to use the private key..
    Get Create (RefClass(cComChilkatRsa)) To hoRsa
    If (Not(IsComObjectCreated(hoRsa))) Begin
        Send CreateComObject of hoRsa
    End

    Get pvComObject of hoPrivKey to vPrivKey
    Get ComUsePrivateKey Of hoRsa vPrivKey To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Indicate we'll be signing the utf-8 byte representation of the string..
    Set ComCharset Of hoRsa To "utf-8"

    //  Sign some plaintext using RSA-SHA256

    Move "this is the text to be signed" To sPlaintext
    Get ComSignString Of hoRsa sPlaintext "SHA256" To hoBinarySignature
    Get ComLastMethodSuccess Of hoRsa To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Alternatively, if the signature is desired in some encoded string form,
    //  such as base64, base64-url, hex, etc.
    Set ComEncodingMode Of hoRsa To "base64-url"
    Get ComSignStringENC Of hoRsa sPlaintext "SHA256" To sSignatureStr
    Showln "base64-url RSA signature: " sSignatureStr


End_Procedure