MD5withRSA签名
签名:
openssl_sign($data, $signature, $pkeyid,OPENSSL_ALGO_MD5 );
验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_MD5);
代码如下:
<?php
class Md5RSA{
/**
* 利用约定数据和私钥生成数字签名
* @param $params 待签数据
* @return String 返回签名
*/
public function sign($params)
{
if (empty($params))
{
return false;
}
$privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
if (empty($privateKey ))
{
return false;
}
$pkeyId = openssl_get_privatekey($privateKey );
if (empty($pkeyId ))
{
return false;
}
$verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_MD5);
openssl_free_key($pkeyId);
return $signature;
}
/**
* @param $params待验证数据
* @param $signature 数字签名
* @return true 验证成功 false 验证失败
*/
public function isValid($params='', $signature='')
{
if (empty($params) || empty($signature))
{
return false;
}
$publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
if (empty($publicKey ))
{
return false;
}
$pkeyId = openssl_get_publickey($publicKey );
if (empty($pkeyId ))
{
return false;
}
$result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_MD5);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1.
switch ($result) {
case 1:
return true;
default:
return false;
}
}
}
SHA1withRSA签名
签名:
openssl_sign($data, $signature, $pkeyid,OPENSSL_ALGO_SHA1);
验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_SHA1);
<?php
class Md5RSA{
/**
* 利用约定数据和私钥生成数字签名
* @param $params 待签数据
* @return String 返回签名
*/
public function sign($params)
{
if (empty($params))
{
return false;
}
$privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
if (empty($privateKey ))
{
return false;
}
$pkeyId = openssl_get_privatekey($privateKey );
if (empty($pkeyId ))
{
return false;
}
$verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_SHA1);
openssl_free_key($pkeyId);
return $signature;
}
/**
* @param $params待验证数据
* @param $signature 数字签名
* @return true 验证成功 false 验证失败
*/
public function isValid($params='', $signature='')
{
if (empty($params) || empty($signature))
{
return false;
}
$publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
if (empty($publicKey ))
{
return false;
}
$pkeyId = openssl_get_publickey($publicKey );
if (empty($pkeyId ))
{
return false;
}
$result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_SHA1);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1.
switch ($result) {
case 1:
return true;
default:
return false;
}
}
}
SHA256withRSA签名
签名:
openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
<?php
class Md5RSA{
/**
* 利用约定数据和私钥生成数字签名
* @param $params 待签数据
* @return String 返回签名
*/
public function sign($params)
{
if (empty($params))
{
return False;
}
$privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
if (empty($privateKey ))
{
return False;
}
$pkeyId = openssl_get_privatekey($privateKey );
if (empty($pkeyId ))
{
return False;
}
$verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_SHA256);
openssl_free_key($pkeyId);
return $signature;
}
/**
* @param $params待验证数据
* @param $signature 数字签名
* @return true 验证成功 false 验证失败
*/
public function isValid($params='', $signature='')
{
if (empty($params) || empty($signature))
{
return False;
}
$publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
if (empty($publicKey ))
{
return False;
}
$pkeyId = openssl_get_publickey($publicKey );
if (empty($pkeyId ))
{
return False;
}
$result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_SHA256);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1.
switch ($result) {
case 1:
return true;
default:
return false;
}
}
}
备注:openssl_get_publickey — 别名 openssl_pkey_get_public()