php openssl相关加密解密 验签代码

摘要:
私钥应由自己保管,其他人不应知道。公钥是公共的,其他人知道它也没关系。商家的公钥和私钥用于发起支付商家使用支付宝官方指导文档openssl工具在本地生成的公钥和公钥,然后将生成的公钥上传到支付宝商家后台。支付时,我们使用私钥对订单信息进行加密,支付宝服务器在收到加密信息后,会使用商家后台上传的公钥对信息进行解密。
<?php

//生成公钥 私钥
/**
 * 用 OpenSSL, Linux 上自带,常用命令如下:

-- 生成 RSA 私钥(传统格式的)

openssl genrsa -out rsa_private_key.pem 1024

-- 将传统格式的私钥转换成 PKCS#8 格式的(JAVA需要使用的私钥需要经过PKCS#8编码,PHP程序不需要,可以直接略过)

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

-- 生成 RSA 公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
 */
$str = json_encode([
    'a'=>1,
    'b'=>2,
    'c'=>3,
]);


$keyPath = __DIR__.'/key';



$publicKey = openssl_pkey_get_public(file_get_contents($keyPath.'/rsa_public_key.pem'));//获取公钥
$privateKey = openssl_pkey_get_private(file_get_contents($keyPath.'/rsa_private_key.pem'));//获取私钥

// var_dump($publicKey).'<br />';
// var_dump($privateKey);

//公钥签名  私钥验签
openssl_sign($str,$sign,$privateKey);
$sign = base64_encode($sign);

//验签通过
openssl_verify($str,base64_decode($sign),$publicKey);


//公钥加密
openssl_public_encrypt($str,$data,$publicKey);
$data = base64_encode($data);
//私钥解密
openssl_private_decrypt(base64_decode($data),$deData,$privateKey);
echo $deData;//{"a":1,"b":2,"c":3}

//私钥加密
openssl_private_encrypt($str,$data,$privateKey);
$data = base64_encode($data);

//公钥解密
openssl_public_decrypt(base64_decode($data),$deData,$publicKey);

echo $deData;//{"a":1,"b":2,"c":3}


/**
 * 总结:
 * 公钥和私钥本是一对,加密解密没有固定顺序,加密用公钥,那解密必然是用私钥,可以理解为两者都是对方解密的钥匙
 * 签名的话只能用私钥生成签名,公钥来验签
 */

 /**
  * 摘抄一段支付宝论坛关于公私钥的解答:
  阿里云  >  教程中心   >  android教程  >  关于支付宝的公钥与私钥  
关于支付宝的公钥与私钥
发布时间:2018-01-18 来源:网络 上传者:用户

关键字: 公钥 支付 关于 宝的

发表文章
摘要:以下只讲原理,不讲实际操作加密技术支付宝支付时,通讯信息的加密算法使用的是非对称加密算法,意思钥匙有两把,其中一把对数据进行加密后,需要使用另外一把钥匙才能将其解密,也就是公钥(publickey)和私钥(privatekey)。私钥自己保存,切勿被别人知道,公钥是公开的,给人知道也没关系。商户的公钥与私钥,用于发起支付商户使用支付宝官方指导文档的openssl工具在本地生成的公钥和私钥,然后将生成的公钥上传到支付宝商家后台,支付时,我们使用该私钥对订单信息加密,支付宝服务端

以下只讲原理,不讲实际操作


加密技术
支付宝支付时,通讯信息的加密算法使用的是非对称加密算法,意思钥匙有两把,其中一把对数据进行加密后,需要使用另外一把钥匙才能将其解密,也就是公钥(public key)和私钥(private key)。私钥自己保存,切勿被别人知道,公钥是公开的,给人知道也没关系。


商户的公钥与私钥,用于发起支付
商户使用支付宝官方指导文档的openssl工具在本地生成的公钥和私钥,然后将生成的公钥上传到支付宝商家后台,支付时,我们使用该私钥对订单信息加密,支付宝服务端收到该加密信息后会拿商户后台上传的公钥对该信息进行解密。


支付宝的公钥与私钥,用于回调
支付宝有个公开的公钥,所有的商户使用的支付宝公钥都是同一个。支付成功或失败后,支付宝服务端要回调告诉我们支付结果,会拿私钥对该回调信息进行加密,我们收到该信息要拿支付宝的公钥进行解密。
  */

免责声明:文章转载自《php openssl相关加密解密 验签代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇$_SERVER详解Iframe 参数列表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker开启安全的TLS远程连接

目录 1.1 不安全的远程访问方式 1.1.1 编辑docker.service文件: 1.1.2 重新加载Docker配置生效 1.1.3 警告! 2.1 建立基于TLS数字签名的安全连接 1.1 不安全的远程访问方式 1.1.1 编辑docker.service文件: vi /usr/lib/systemd/system/docker...

使用 openssl 生成证书

转自:http://www.cnblogs.com/littleatp/p/5878763.html使用 openssl 生成证书  一、openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。官网:https://www.openssl.org/sourc...

OpenSSL 介绍和使用

转自:https://www.jianshu.com/p/fb2ae3dc7986 一、SSL 简介 按照我的理解来解释下,为了让网络通信更安全,需要认证和加密,认证是说明你是要找的人,加密是为了让截获中间报文第三者无法得到消息内容。 为此有人设计了SSL,即套接字上的安全层,简单来说就是在TCP之上做一个安全通信层,HTTP on SSL 即是HTT...

QT5.1 调用https

以VS开发为例。因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1、首先打开http://slproweb.com/products/Win32OpenSSL.html网页; 2、下载安装包,我下载的是:Win32 OpenSSL v1.0.1c Light安装包,随着时...

支付宝支付接口功能

官方文档:https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1 支付宝支付功能申请条件 一、实名支付宝账号。 二、要求是企业账户。 三、已经签约手机支付功能。 Linux环境下生成RSA私钥和公钥 https://doc.open.ali...

Windows 下openssl安装与配置

编译thirift失败 网上方法很多,大部分是针对32位机的,自己的电脑因为是win7,64位,摸索了很久才安装成功.   环境 WIN7, 64位, vs2005   下载ActivePerl 配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl.   网址: http://www.activestate...