<?php
 /**
* 根据原文生成签名内容
*
* @param string $data 原文内容
*
* @return string
* @author confu
*/
function sign($data)
{
$filePath = 'test.p12';
if(!file_exists($filePath)) {
return false;
} $pkcs12 = file_get_contents($filePath);
if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
$privateKey = $certs['pkey']; //根据实际情况键值可能不同
$publicKey = $certs['cert']; //根据实际情况键值可能不同
$binary_signature = "";
if (openssl_sign($data, $binarySignature, $privateKey, OPENSSL_ALGO_SHA1)) {
return $binarySignature;
} else {
return '';
}
} else {
return '';
}
} /**
* 验证签名自己生成的是否正确
*
* @param string $data 签名的原文
* @param string $signature 签名
*
* @return bool
* @author confu
*/
function verifySign($data, $signature)
{
$filePath = 'test.p12';
if(!file_exists($filePath)) {
return false;
} $pkcs12 = file_get_contents($filePath);
if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
$publicKey = $certs['cert'];
$ok = openssl_verify($data, $signature, $publicKey);
if ($ok == 1) {
return true;
}
}
return false;
} /**
* 验证返回的签名是否正确
*
* @param string $data 要验证的签名原文
* @param string $signature 签名内容
*
* @return bool
* @author confu
*/
function verifyRespondSign($data, $signature)
{
$filePath = 'allinpay-pds.pem';
if(!file_exists($filePath)) {
return false;
} $fp = fopen($filePath, "r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert); if(!is_resource($pubkeyid)) {
return false;
} $ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
openssl_free_key($pubkeyid);
return true;
}
return false;
}
?>

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)

php生成签名及验证签名的更多相关文章

  1. openssl生成签名与验证签名

    继上一篇RSA对传输信息进行加密解密,再写个生成签名和验证签名. 一般,安全考虑,比如接入支付平台时,请求方和接收方要互相验证是否是你,就用签名来看. 签名方式一般两种,对称加密和非对称加密.对称加密 ...

  2. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  3. C#.NET RSA 私钥签名 公钥验证签名

    C#.NET RSA 私钥签名 公钥验证签名 公钥验签 1.待签名字符串转为byte数组时,一般使用UTF8. 2.将私钥字符串(PKCS8或PKCS1格式)转为C#.NET的RSACryptoSer ...

  4. C#中RSA加密解密和签名与验证的实现

    RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔(Adi Shamir)和伦纳德•阿德曼(Le ...

  5. (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)

    rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...

  6. 【转】C#中RSA加密解密和签名与验证的实现

    [转]C#中RSA加密解密和签名与验证的实现 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔 ...

  7. iOS RSA加解密签名和验证

    转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...

  8. .net通用签名方法 webapi签名方法

    验证签名方法 [HttpGet] public HttpResponseMessage LockRegister(string 参数1, int 参数2, string 参数3, string 参数4 ...

  9. 第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证

    第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证 这是密码学52件事系列中第16篇,这周我们描述关于DSA,Schnorr和RSA-FDH的密钥生成,签名和验证. 1. ...

随机推荐

  1. Vim 基本配置和经常使用的命令

    vim 优势和应用场景 vim 的优点纯文字编辑和 Linux 完美的融合提供了命令行.只能假设 ssh 至server进行操作,那么这样的情况就仅仅能使用 vim 了.vim 也是最为强大的通用文本 ...

  2. hdoj 2183 奇数阶魔方(II) 【模拟】+【法】

    比赛的时候花了一个多小时,以做不做 分析:可观察:中间是(n*n+1)/2, 中间的上面是n*n,以下是1, 左边是n,右面是(n*n+1)-n,并且正对角线是最左上对到最右下端添加(+1).另外一条 ...

  3. Android虚拟机器学习总结Dalvik虚拟机创建进程和线程分析

    Dalvik调用一个成员函数时,虚拟机,假设发现,该成员函数是一个JNI办法,然后,它会直接跳转到其地址来运行.也就是说.JNI方法是直接在本地操作系统上运行的.而不是由Dalvik虚拟机解释器运行. ...

  4. 国外流行的共享网站实现:facebook,twitter,google+1,tumblr等待

    近期需要做相关的国外几个站点共享,本来我以为它会和weibo.在同样的烦恼空间,什么appkey啦,apptoken啦.api啦.结果非常意外的发现并非如此恼火. Twitter分享: https:/ ...

  5. cocos2dx怎样设置ios和Android横屏竖屏的几种方法

    cocos2d-x编译到ios上.默认是横屏的,若要改为http://竖屏.不同的ios版本号.方法也会不同 在ios7上或许我们设置好了横竖屏.但到了ios6上或许会变化.以下白白给大家分享一下我的 ...

  6. DLX 舞蹈链 精确覆盖 与 重复覆盖

    精确覆盖问题:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 还有重复覆盖问题 dancing links 是 一种数据结构,用来优化搜索,不算是一种算法.(双向 ...

  7. 多于ListView同步滚动

    简介: 发展过程中可能遇到的2一个或多个其他listview为了用相应的关系保持滚动的情况下一起,本文演示了这种效应为大家. 功效: 实现原理: 在滚动当中不论什么一个ListView的时候,同一时候 ...

  8. D - Cow Ski Area

    Description Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently t ...

  9. cocos2d0基础知识三个音符

    1.触摸屏事件: bool HelloWorld::init() { //省略的代码的最后位 this->schedule(schedule_selector(HelloWorld::usecr ...

  10. SPOJ104 Highways,跨越数

    高速公路(SPOJ104 Highways) 一个有n座城市的组成国家,城市1至n编号,当中一些城市之间能够修建快速公路.如今,须要有选择的修建一些快速公路.从而组成一个交通网络.你的任务是计算有多少 ...