Sample code for 30+ languages & platforms
PHP ActiveX

Sign JSON (or any Text) to Create a Detached PKCS7 Signature

Demonstrates how to sign JSON or any string using a certificate + private key from a .p12/.pfx to create a detached PKCS7 signature. (A detached signature is one that does not embed the original signed data.)

Chilkat PHP ActiveX Downloads

PHP ActiveX
<?php

$success = 0;

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

$crypt = new COM("Chilkat.Crypt2");

$cert = new COM("Chilkat.Cert");
$success = $cert->LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
if ($success != 1) {
    print $cert->LastErrorText . "\n";
    exit;
}

// Tell the crypt component to use this cert.
$success = $crypt->SetSigningCert($cert);
if ($success != 1) {
    print $crypt->LastErrorText . "\n";
    exit;
}

$crypt->HashAlgorithm = 'sha256';

// By default, all the certs in the chain of authentication are included in the signature.
// If desired, we can choose to only include the signing certificate:
$crypt->IncludeCertChain = 0;

// Create the detached signature, which does NOT contain the original data.
// To create a PKCS7 signature that contains the original data, see CAdES Sign JSON
$crypt->Charset = 'utf-8';

$stringToSign = '{ \'abc\': 123}';
$detachedSig = $crypt->SignString($stringToSign);
if ($crypt->LastMethodSuccess == 0) {
    print $crypt->LastErrorText . "\n";
    exit;
}

// Verify the signature against the original data.
$verified = $crypt->VerifyString($stringToSign,$detachedSig);
if ($verified == 0) {
    print $crypt->LastErrorText . "\n";
    exit;
}

print 'Success!' . "\n";

?>