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

转载链接:http://liuxufei.com/weblog/jishu/376.html


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/HLjEWvtgSjsqi65R+4FbC95BROKR1qhsAo2xb25EZ/Ab94khxlYBTtAfSFcT9dIXP6rmmW2wSlnIOSSxLplfj7I4jQIDAQAB-----END PUBLIC KEY-----';$prikey ='-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQDWglpJUgBrlolNz4cgRBxsD/Em8N+5g/IyFuEj0DqRG8jN8CIAl8W/zdsPn8YBqaml9ovtySHhk2sRYWCGPTebFcS5EIrMJHtQaIv6VoaEI6hSfreKRZ73/tMOoKivKwNBRKSLewhXdq5pc4sc00as4CrxDi1yPOk+ROyONCom9QIDAQABAoGAX0vbxnT6oNFowDuxAUGhCtTuQmmCSs12fJAzhxCL5ElepTbINFE41eQjLMbDVZvFNWjZc1MGjUtLppYHJrvthlRw2dRHHd1adwy1TB1aPKvgkr/78a7YwQJrMl/1/eIs7Ry/DqZatRCqeK0TTW6A+rlwmvtvJ2dO+mgO1DUWUwECQQD+kLSVcxqDAKY7gyhlzDAfYQgdva4+jP1a2vXDP6A+9m7uEP/yRmUO9O/jsoE8s29ujBq6XnYA2KI8vedny6NBAkEA17faaBMKkKNhWmSeHD+raBLc4xElQVXysvw7RPfBtjSEqouaDCBgg1r1e054Pj+pyLWdjW0P7R7Y8FWVWHM6tQJAPKs6DoAfKmeGNpq8jv5J3cCfUY86LrglTXjvp3fLdhX/PAebKB90yErBvU92k4PkI8GKQS5wCyWWDMnpk4gpwQJABUUPh9VXP7tOCIhGuIfxpwQ28zEbCOKRoD+7Lu8ig1H7H7NzWvJ7iRnyv0VmeJbTjfyp0aelaPSE9jIRCO0ftQJBAKTyfoe6v6WjRmSQql2CVMCJ/0SyAjduJyzJDBLPgs+Vi0s+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://www.mzph.cn/news/276552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转] DevExpress 第三方控件汉化的全部代码和使用方法

DevExpress.XtraEditors.Controls 此控件包中包含的控件最多&#xff0c;包括文本框&#xff0c;下拉列表&#xff0c;按钮&#xff0c;等等 DevExpress.XtraGrid 网格 DevExpress.XtraBars 菜单栏 和 工具栏 DevExpress.XtraNavBar 导航条 DevExpress.XtraPr…

QPM 性能监控组件总篇

QPM &#xff08;Quality Performance Monitor&#xff09; 是一个质量性能监控组件&#xff0c;可以很方便的查看当前 App 的性能和常用数据。目前主要运行在 Android 平台上&#xff0c;通过集成 QPM 组件&#xff0c;可以在 App 中通过悬浮窗可视化相关实时数据。意在帮助广…

福音!微信个人公众号可以改名了!

微信个人公众号可以改名了&#xff01;&#xff01;&#xff01;今年&#xff0c;我们学校从景德镇陶瓷学院更名为景德镇陶瓷大学&#xff0c;但苦于微信限制&#xff0c;很多微信公众号无法更名。很多组织社团就放弃了原先的关注量&#xff0c;重新申请注册账号。当前我们的订…

js list删除指定元素_删除js数组中的指定元素,有这两步就够了

js数组是js部分非常重要的知识&#xff0c;有时我们有这么个需求js数组删除指定元素&#xff0c;先定义一个函数来获取删除指定元素索引值&#xff0c;然后用js数组删除的方法&#xff0c;来删除指定元素即可&#xff0c;就两步不难&#xff0c;很简单。1、JS的数组对象定义一个…

sudo 安装 常见错误

运行环境Linux&#xff1a; 1、sudo&#xff1a;安装 apt-get install sudo 2、sudo: must be setuid root错误解决方法. ls -l /usr/bin/sudo chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo reboot 3、sudo&#xff1a;提示用户无权限之类 在 /etc/…

慕课网高并发实战(一)-并发与高并发基本概念

课程网址 并发&#xff1a; 同时拥有两个或者多个线程&#xff0c;如果程序在单核处理器上运行&#xff0c;多个线程交替得换入或者换出内存&#xff0c;这些线程是同时“存在”的&#xff0c;每个线程都处于执行过程中的某个状态&#xff0c;如果运行在多核处理器上&#xff…

2009最经典名句

一&#xff1a;我的优点是&#xff1a;我很帅&#xff1b;但是我的缺点是&#xff1a;我帅的不明显. 二&#xff1a;谈钱不伤感情&#xff0c;谈感情最他妈伤钱。 三&#xff1a;我诅咒你一辈子买方便面没有调料包。 四&#xff1a;会计说&#xff1a;“你晚点来领工资吧&#…

计算机协会丨让技能得到提升,让思维受到启迪

“ 各位2016级新生&#xff0c;新的学期马上就要开始了&#xff0c;学校的各个组织和社团你真的了解了吗&#xff1f;在眼花缭乱的社团里如何找到自己真正喜欢的呢&#xff1f;或许看完计算机协会的纳新微信你就都明白啦&#xff01;关键词&#xff1a;计算机协会景德镇陶瓷大学…

ondestroy什么时候调用_尾调用和尾递归

尾调用1. 定义尾调用是函数式编程中一个很重要的概念&#xff0c;当一个函数执行时的最后一个步骤是返回另一个函数的调用&#xff0c;这就叫做尾调用。注意这里函数的调用方式是无所谓的&#xff0c;以下方式均可&#xff1a;函数调用: func()方法调用: obj.method()call调用:…

查看/修改Linux时区和时间

转载链接&#xff1a;http://blog.csdn.net/colincjl/article/details/6133036 查看/修改Linux时区和时间 一、时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timeconfig 方法(3) 适用于Debian dpkg-reconfigure tzdat…

dhl:使用return RedirectToAction()和 return view()

一个Action&#xff1a; Code/// <summary> /// Friend好友的地 /// </summary> /// <returns></returns> public ActionResult FriendFarm(string pid) {BLL.DTOFarm farm new AppleGrange.BLL.DTOFarm(pid); …

【更名通知】将以个人名义继续更新维护

这是我&#xff08;2013年任职计算机协会会长&#xff09;在2013年申请的公众号。由于2016年学校陶院更名为陶大&#xff0c;在当时公众号无法修改名称。后来计协的的学弟学妹申请了新的公众号"陶大计算机Association"&#xff0c;大家可以前往关注&#xff0c;所以该…

CentOS7.6 MySQL8环境搭建 配置远程登录 字符集UTF8 简单密码

一、环境准备 1、清理环境中系统自带的MySQL &#xff08;1&#xff09;删除系统自带的MySQL或Mariadb yum remove mysql-libs &#xff08;2&#xff09;查询系统中是否还有残余的依赖包 rpm -qa | grep mariadb &#xff08;3&#xff09;删除rpm依赖包 rpm -e --nodeps mar…

radio切换控制div显示_JavaScript连载31图片动态切换以及关闭图片案例

一、图标切换31.1点击那两个按钮可以做到轮番显示图片二、关闭图片案例31.2点击右上角的叉&#xff0c;图片会消失。三、源码&#xff1a;D31_iconSwitch.htmlD31_2_CloseImage.html地址:https://github.com/ruigege66/JavaScript/blob/master/D31_iconSwitch.htmlhttps://gith…

jQuery 1.9+ 移除$.browser方法

转载链接&#xff1a;http://blog.csdn.net/czplplp_900725/article/details/8704438 jQuery 从 1.9 版开始&#xff0c;移除了 $.browser 和 $.browser.version &#xff0c;取而代之的是 $.support。 在更新的 2.0 版本中&#xff0c;将不再支持 IE 6/7/8。 以后&#xff0c;…

ASP.NET跨页传值方法汇总

方法一&#xff1a;问号传值&#xff08;Response.Redirect方法&#xff09;1&#xff1a;源页&#xff1a;在按钮的点击事件程序中写入Response.Redirect方法&#xff0c;在其中使用问号传值。如&#xff1a;Response.Redirect("Default2.aspx?id"txtId.Text.Trim(…

工作一年后,我有些感悟(写于2017年)

时间拉回到2016年5月23日&#xff0c;当天拍毕业照&#xff0c;晚上是大学毕业酒会&#xff0c;那一晚整个酒店都弥漫着伤感的气息。那一晚大家为了找KTV拖延到很晚&#xff0c;最后一群人选择来到了操场&#xff0c;凌晨两点多一群人还在操场上玩着游戏。5月25日离校&#xff…

PHP基础学习之数组使用要点

一、什么是PHP数组&#xff1f;数组 array 是一组有序的变量&#xff0c;其中每个变量都被称为一个元素。每个元素由一个特殊的标识符来区分&#xff0c;这个标识符称之为键&#xff08;也可以称之为下标&#xff09;。数组中的每个元素都包含两项&#xff1a;键和值。可以通过…

python和php可以一起用吗_Apache同时支持PHP和Python的配置方法

最近开始学着用PythonTornadoMongoDB写网站&#xff0c;兴起写了一个博客&#xff0c;觉得很有意思所以想挂在服务器上发布出去找大家一起玩。这个时候就遇到了问题。服务器是windows系统&#xff0c;安装的是Apache&#xff0c;所以需要配置Apache&#xff0c;使Apache同时支持…

CCNA课堂精简笔记

网络的三层架构:1.接入层: 提供网络接入点,相应的设备端口相对密集. 主要设备:交换机,集线器.2.汇聚层: 接入层的汇聚点,能够提供路由决策.实现安全过滤,流量控制.远程接入. 主要设备:路由器.3.核心层: 提供更快的传输速度, 不会对数据包做任何的操作OSI七层网络模型: Protocol…