php利用openssl生成签名实例程序

php利用openssl生成签名实例程序

实例
代码如下
<?php

/**

* 根据原文生成签名内容

*

* @param string $data 原文内容

*

* @return string

*/

function sign($strData)

{

$filePath = 'test.pfx';

if(!file_exists($filePath)) {

return false;

}

$pkcs12 = file_get_contents($filePath);

if (openssl_pkcs12_read($pkcs12, $certs, '')) {

$privateKey = $certs['pkey'];

$publicKey = $certs['cert'];

$signedMsg = "";

if (openssl_sign($strData, $signedMsg, $privateKey)) {

$signedMsg=bin2hex($signedMsg);

return $signedMsg;

} else {

return '';

}

} else {

return '0';

}

}

/*

openssl_pkcs12_read 可以读取pfx格式的私钥,而不需要非要转成pem格式的文件

*/

?>

openssl_sign 默认signature_alg参数是OPENSSL_ALGO_SHA1

如果使用DSA加密方式需要使用OPENSSL_ALGO_DSS1参数

signature_alg 其他参数

OPENSSL_ALGO_DSS1 (integer)

OPENSSL_ALGO_SHA1 (integer)

OPENSSL_ALGO_SHA224 (integer)

OPENSSL_ALGO_SHA256 (integer)

OPENSSL_ALGO_SHA384 (integer)

OPENSSL_ALGO_SHA512 (integer)

OPENSSL_ALGO_RMD160 (integer)

OPENSSL_ALGO_MD5 (integer)

OPENSSL_ALGO_MD4 (integer)

OPENSSL_ALGO_MD2 (integer)