来源:http://www.webiji.com/archives/412

php利用openssl实现RSA非对称加密签名

1. 先用php生成一对公钥和私钥

$res = openssl_pkey_new();
openssl_pkey_export($res,$pri);
$d= openssl_pkey_get_details($res);
$pub = $d[‘key’];
var_dump($pri,$pub);

2. 保存好自己的私钥,把公钥可以公开给别人。如果需要对某数据进行签名,证明那数据是从你这里发出的,就需要用私钥:

$res = openssl_pkey_get_private($pri);
if (openssl_sign(‘hello’, $out, $res))
var_dump(base64_encode($out));

上例中 $pri 为自己的私钥,’hello’ 为待签名的数据,如果签名成功,最后输出为base64编码后的签名,如:

j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJT
J4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6
QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=

3. 别人收到你的数据 ‘hello’ 和签名字串,想验证这是从你发来的数据的话,用你公开的公钥验证:

$sig = base64_decode($sig);
$res = openssl_pkey_get_public($pubkey);
if (openssl_verify(‘hello’, $sig, $res) === 1)
; // 通过验证

上例中刚开始的 $sig 为之前你base64编码过的签名, $pubkey 为你的公钥

以下为网易一卡通直通车的过程分析

<?php
// Rsa的公私钥
$pubkey =
‘—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCurS+gyXEGyNxKcu1Ja0L6uN7/
TBMNQw/DgicvftExXrus1zTPL5jSe/fOjAqssO52Pla0UlugIAgazYn/HLjEWvtg
Sjsqi65R+4FbC95BROKR1qhsAo2xb25EZ/Ab94khxlYBTtAfSFcT9dIXP6rmmW2w
SlnIOSSxLplfj7I4jQIDAQAB
—–END PUBLIC KEY—–
‘;
$prikey =
‘—–BEGIN RSA PRIVATE KEY—–
MIICXAIBAAKBgQDWglpJUgBrlolNz4cgRBxsD/Em8N+5g/IyFuEj0DqRG8jN8CIA
l8W/zdsPn8YBqaml9ovtySHhk2sRYWCGPTebFcS5EIrMJHtQaIv6VoaEI6hSfreK
RZ73/tMOoKivKwNBRKSLewhXdq5pc4sc00as4CrxDi1yPOk+ROyONCom9QIDAQAB
AoGAX0vbxnT6oNFowDuxAUGhCtTuQmmCSs12fJAzhxCL5ElepTbINFE41eQjLMbD
VZvFNWjZc1MGjUtLppYHJrvthlRw2dRHHd1adwy1TB1aPKvgkr/78a7YwQJrMl/1
/eIs7Ry/DqZatRCqeK0TTW6A+rlwmvtvJ2dO+mgO1DUWUwECQQD+kLSVcxqDAKY7
gyhlzDAfYQgdva4+jP1a2vXDP6A+9m7uEP/yRmUO9O/jsoE8s29ujBq6XnYA2KI8
vedny6NBAkEA17faaBMKkKNhWmSeHD+raBLc4xElQVXysvw7RPfBtjSEqouaDCBg
g1r1e054Pj+pyLWdjW0P7R7Y8FWVWHM6tQJAPKs6DoAfKmeGNpq8jv5J3cCfUY86
LrglTXjvp3fLdhX/PAebKB90yErBvU92k4PkI8GKQS5wCyWWDMnpk4gpwQJABUUP
h9VXP7tOCIhGuIfxpwQ28zEbCOKRoD+7Lu8ig1H7H7NzWvJ7iRnyv0VmeJbTjfyp
0aelaPSE9jIRCO0ftQJBAKTyfoe6v6WjRmSQql2CVMCJ/0SyAjduJyzJDBLPgs+V
i0s+73mVYJihdjkA9chHKJwqJ0JIMvxUXNt2VTgwUVE=
—–END RSA PRIVATE KEY—–
‘;

$site_id=”95184″;
$order_id=”123″;
$order_time=”20120307120000″;
$user_id=”61981700″;
$urs=”someone@163.com”;
$reason=”1″;
$pts=”150″;

$sign=$site_id.””.$user_id.””.$order_id.””.$order_time.””.$urs.””.$reason.””.$pts;

$sign=sha1($sign);

$res = openssl_pkey_get_private($prikey);

if (openssl_sign($sign, $out, $res))
$sign=bin2hex($out);

$url=”http://esalesdev.163.com:8002/script/interface/dc_input?site_id=”.$site_id.”&order_id=”.$order_id.”&order_time=”.$order_time.”&user_id=”.$user_id.”&urs=”.$urs.”&reason=”.$reason.”&pts=”.$pts.”&sign=”.$sign;
print_r($url);

?>

来源:http://blog.csdn.net/jk0803_wantao/article/details/43667861

php利用openssl实现RSA非对称加密签名相关推荐

  1. php rsa验证签名,php利用openssl实现RSA非对称加密签名验证

    1. 先用php生成一对公钥和私钥 $res = openssl_pkey_new(); openssl_pkey_export($res,$pri); $d= openssl_pkey_get_de ...

  2. [Linux] 使用openssl实现RSA非对称加密

    简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php 生成公钥私钥 使用命令生成私钥: openssl genr ...

  3. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  4. 利用RSA非对称加密对文本信息进行加密

    利用RSA非对称加密对文本信息进行加密 非对称加密 非对称加密即创建一对密钥对,分为公钥和私钥. 公钥即大家都能看到的秘钥,私钥即自己用的秘钥,rsa加密后密码的安全性一般取决于用户对私钥的保管. 公 ...

  5. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

  6. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...

  7. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  8. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  9. Springboot+RSA非对称加密

    这是百度百科对(对称加密丶非对称加密)的解释: (1)对称加密算法在加密和解密时使用的是同一个秘钥. (2)非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称 ...

最新文章

  1. java 字节的复制_JAVA中字节流复制文件
  2. linux nslookup脚本,Linux中nslookup命令起什么作用呢?
  3. Vmware+gdb调试Linux内核——工欲善其事,必先利其器
  4. SpringCloud系列第09节之消息总线Bus
  5. wilcoxon符号秩检验matlab,符号检验和wilcoxon符号秩检验的区别
  6. 一文讲清跨境S2B2C模式及线上品牌/新零售品牌实战打法
  7. 整理41个Python不同方面的练习题,希望对你有帮助
  8. 买了一个西瓜,切开后傻眼,这是冬瓜出轨了?还是西瓜变心了?
  9. Weka的全名是怀卡托智能分析环境
  10. 提高ios app性能 初中高级实践
  11. HTTP协议压缩格式和URL编码介绍
  12. 音频 ----- DRC
  13. 【知识点4】素数(质数)
  14. 服务器一般装在哪个位置,立尔讯塔式服务器一般使用在哪些地方?
  15. android 应用图标 角标 显示未读消息
  16. 逻辑回归Logistics--简述
  17. c语言转换为stc程序,STC51单片机入门(C语言)
  18. js将页面转简体或者繁体
  19. 如何将pdf转换成html,怎么把PDF文件转换成HTML?PDF转HTML的最佳方法是什么?
  20. 图记 2016.1.5 透明状态栏

热门文章

  1. kylin3.x安装,解决load hive表的时候提示shaded-guava问题
  2. 百度语音识别合成案例
  3. mysql group by having count_mysql中count(), group by, order by使用详解
  4. python怎么处理文字_使用python进行简单的文本处理
  5. iptables规则基本用法
  6. nginx请求频率限制模块ngx_http_limit_req_module
  7. WebStorm 2017.1增加对Vue.js的支持
  8. 数组名的地址,和数组名取地址的讨论
  9. vs2013update4 vs-mda-remote cordova真机测试ios
  10. Selenium 使用要点记录二