Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用PHP实现RSA或RSA2算法的签名和验签

使用PHP实现RSA或RSA2算法的签名和验签

作者头像
友儿
发布于 2022-09-09 09:43:36
发布于 2022-09-09 09:43:36
1.6K10
代码可运行
举报
文章被收录于专栏:友儿友儿
运行总次数:0
代码可运行

 使用RSA算法除了加密解密之外(加密解密的代码可以查看本站PHP使用RSA算法加密解密数据 这篇文章),在支付等接口方面通常还会用到生成签名和验证签名操作,下面是PHP代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class RSA
{
    /**
     * RSA签名
     * @param $data 待签名数据
     * @param $private_key 私钥字符串
     * return 签名结果
     */
    function rsaSign($data, $private_key,$sign_type='OPENSSL_ALGO_SHA1') {

            $search = [
                    "-----BEGIN RSA PRIVATE KEY-----",
                    "-----END RSA PRIVATE KEY-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];

            $private_key=str_replace($search,"",$private_key);
            $private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1];
            $res=openssl_get_privatekey($private_key);

            if($res)
            {
                    openssl_sign($data, $sign,$res,$sign_type);
                    openssl_free_key($res);
            }else {
                    exit("私钥格式有误");
            }
            $sign = base64_encode($sign);
            return $sign;
    }

    /**
     * RSA验签
     * @param $data 待签名数据
     * @param $public_key 公钥字符串
     * @param $sign 要校对的的签名结果
     * return 验证结果
     */
    function rsaCheck($data, $public_key, $sign,$sign_type='OPENSSL_ALGO_SHA1')  {
            $search = [
                    "-----BEGIN PUBLIC KEY-----",
                    "-----END PUBLIC KEY-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];
            $public_key=str_replace($search,"",$public_key);
            $public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
            $res=openssl_get_publickey($public_key);
            if($res)
            {
                    $result = (bool)openssl_verify($data, base64_decode($sign), $res);
                    openssl_free_key($res);
            }else{
                    exit("公钥格式有误!");
            }
            return $result;
    }

}

$str = '11223344';

echo '待签名的数据是' . $str . '<hr>';

$obj = new RSA();
//
$sign = $obj->rsaSign($str,file_get_contents('./private.txt'));

echo '签名后的数据是' . $sign . '<hr>';

if($obj->rsaCheck($str,file_get_contents('./public.txt'),$sign)){
    echo '验证成功';
}else{
    echo '验证失败';
}

  默认签名方式为RSA(OPENSSL_ALGO_SHA1)如果使用RSA2也比较简单只需要在调用签名和验签的方法里面多增加最后一个参数为OPENSSL_ALGO_SHA256就可以了,增加参数后执行的对应方法内的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//签名 RSA2
openssl_sign($data, $sign,$res,OPENSSL_ALGO_SHA256);

//验签 RSA2
openssl_verify($data, base64_decode($sign), $res,OPENSSL_ALGO_SHA256);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
赞赞赞,写的很好
赞赞赞,写的很好
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【Elasticsearch系列十二】聚合-电视案例
hits.hits:我们指定了 size 是 0,所以 hits.hits 就是空的
kwan的解忧杂货铺
2024/09/18
1300
干货 | 通透理解Elasticsearch聚合
使用Elasticsearch的过程中,除了全文检索,或多或少会做统计操作,而做统计操作势必会使用Elasticsearch聚合操作。
铭毅天下
2018/10/24
2K0
干货 | 通透理解Elasticsearch聚合
乐优项目:Elasticsearch介绍和安装及使用-(六)
而商品的数量非常多,而且分类繁杂。如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。
用户4396583
2024/08/14
4210
一起学Elasticsearch系列-聚合查询
聚合查询是 Elasticsearch 中一种强大的数据分析工具,用于从索引中提取和计算有关数据的统计信息。聚合查询可以执行各种聚合操作,如计数、求和、平均值、最小值、最大值、分组等,以便进行数据汇总和分析。
BookSea
2023/11/28
9320
一起学Elasticsearch系列-聚合查询
Elasticsearch7教程
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
Remember_Ray
2021/04/05
4.2K0
学好Elasticsearch系列-聚合查询
Elasticsearch中的聚合是一种以结构化的方式提取和展示数据的机制。可以把它视为SQL中的GROUP BY语句,但是它更加强大和灵活。
BookSea
2023/08/08
6770
学好Elasticsearch系列-聚合查询
Elasticsearch入门——搜索与聚合
Elasticsearch作为分布式搜索引擎可以说应用非常广了,可以用于站内搜索,日志查询等功能。本文将着重介绍Elasticsearch的搜索与聚合功能。
灬沙师弟
2024/01/11
2600
Elasticsearch入门——搜索与聚合
Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch
结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据;指具有固定格式或有限长度的数据,如数据库,元数据等。
RendaZhang
2020/12/02
2.4K0
Elasticsearch基本使用
可以在https://www.elastic.co/cn/downloads/elasticsearch这个页面找到elasticsearch对应系统的安装包,elasticsearch用java开发的, 最新的版本内置了对应的jdk, 通过下面的方式能快速启动:
良辰美景TT
2020/12/14
6760
数万字长文带你入门elasticsearch
es会根据创建的文档动态生成映射,可以直接将动态生成的映射直接复制到需要自定义的mapping中
没有故事的陈师傅
2022/04/05
1.8K0
ElasticSearch基础语法
Elasticsearch提供了一个可以执行查询的Json风格的DSL。这个被称为Query DSL,该查询语言非常全面。
shimeath
2021/01/05
1.3K0
ElasticSearch基础语法
Elasticsearch介绍
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。
CIKEY
2019/09/03
8570
使用Elasticsearch进行数据分析
Elasticsearch作为一款基于Lucene打造的分布式搜索引擎,常用于搜索和日志场景,而在数据分析场景,Elasticsearch也提供了聚合Aggregations API支持完成复杂的查询分析,并且可以使用Kibana完成数据的可视化。本文就如何使用Elasticsearch进行数据分析做一个简单的介绍。
bellen
2022/08/10
2.6K0
最强分布式搜索引擎——ElasticSearch
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
秋落雨微凉
2023/03/24
3.1K0
最强分布式搜索引擎——ElasticSearch
Elasticsearch初检索及高级
PUT customer/external/1 :在 customer 索引下的 external 类型下保存 1号数据
乐心湖
2021/01/18
1.1K0
Elasticsearch初检索及高级
Elasticsearch聚合学习之一:基本操作
版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/89735952
程序员欣宸
2019/05/26
6830
ElasticSearch基本使用姿势二
比如我现在只关心url返回的状态码, 主要借助_source来指定需要查询的字段,查询的语法和之前介绍的一致
一灰灰blog
2022/06/15
7500
ElasticSearch基本使用姿势二
【elasticsearch】进阶检索
HTTP客户端工具(POSTMAN),get请求不能携带请求体,我们变为post也是一样的 我们 POST 一个 JSON 风格的查询请求体到 _search API。 需要了解,一旦搜索的结果被返回,Elasticsearch 就完成了这次请求,并且不会维护任何服务端的资源或者结果的 cursor(游标)
周杰伦本人
2022/10/25
5520
【elasticsearch】进阶检索
Elasticsearch快速入门,掌握这些刚刚好!
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式的全文搜索引擎,基于restful web接口。Elasticsearch是用Java语言开发的,基于Apache协议的开源项目,是目前最受欢迎的企业搜索引擎。Elasticsearch广泛运用于云计算中,能够达到实时搜索,具有稳定,可靠,快速的特点。
macrozheng
2020/04/10
8140
Elasticsearch快速入门,掌握这些刚刚好!
Elasticsearch聚合学习之四:结果排序
本文是《Elasticsearch聚合学习》系列的第四篇,在前面的实战中,聚合的结果以桶(bucket)为单位,放在JSON数组中返回,这些数据是没有排序的,今天来学习如何给这些数据进行排序;
程序员欣宸
2019/05/27
8K0
相关推荐
【Elasticsearch系列十二】聚合-电视案例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验