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

RSA Sign with PKCS8 Encrypted Key

See more RSA Examples

Demonstrates how to load a private key from an encrypted PKCS8 file and create an RSA digital signature (and then verify it).

Chilkat Perl Downloads

Chilkat2 Perl
use strict;
use warnings;
use Chilkat2;

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

my $privKey = Chilkat2::PrivateKey->new;

# Load the private key from an RSA PEM file:
my $success = $privKey->LoadAnyFormatFile('raul_privateKey.key', 'a0123456789');
if (!$success) {
    print $privKey->LastErrorText, "\n";
    exit;
}

my $rsa = Chilkat2::Rsa->new;

# Import the private key into the RSA component:
$success = $rsa->UsePrivateKey($privKey);
if (!$success) {
    print $rsa->LastErrorText, "\n";
    exit;
}

# This example will sign a string, and receive the signature
# in a hex-encoded string.  Therefore, set the encoding mode
# to "hex":
$rsa->EncodingMode('hex');

my $strData = 'This is the string to be signed.';

# Sign the string using the sha256 hash algorithm.
# Other valid choices are sha1, sha384, sha512 and others.
my $hexSig = $rsa->SignStringENC($strData, 'sha256');
if (!$rsa->LastMethodSuccess) {
    print $rsa->LastErrorText, "\n";
    exit;
}

print $hexSig, "\n";

# Now verify with the public key.
# This example shows how to use the public key from
# a digital certificate (.cer file)
my $cert = Chilkat2::Cert->new;
$success = $cert->LoadFromFile('raul_publicKey.cer');
if (!$success) {
    print $cert->LastErrorText, "\n";
    exit;
}

my $pubKey = Chilkat2::PublicKey->new;
$cert->GetPublicKey($pubKey);

my $rsa2 = Chilkat2::Rsa->new;
$success = $rsa2->UsePublicKey($pubKey);
if (!$success) {
    print $rsa2->LastErrorText, "\n";
    exit;
}

# Verify the signature against the original data:
$rsa2->EncodingMode('hex');
$success = $rsa2->VerifyStringENC($strData, 'sha256', $hexSig);
if (!$success) {
    print $rsa2->LastErrorText, "\n";
    exit;
}

print "Signature verified!\n";

# Verify with incorrect data:
$success = $rsa2->VerifyStringENC('something else', 'sha256', $hexSig);
if (!$success) {
    print "Signature not verified! (which was expected in this case)\n";
} else {
    print "Hmmm... that's not right...\n";
}