资讯专栏INFORMATION COLUMN

PHP RSA2 签名算法

derek_334892 / 2541人阅读

摘要:什么是是在原来签名算法的基础上,新增了支持的签名算法。的签名算法会继续提供支持,但为了您的应用安全,强烈建议使用的签名算法。

什么是RSA2?

RSA2是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法。

该算法在摘要算法上比SHA1WithRSA有更强的安全能力。

SHA1WithRSA的签名算法会继续提供支持,但为了您的应用安全,强烈建议使用SHA256WithRSA的签名算法。

开发平台算法名称 标准签名算法名称 备注
RSA2 SHA256WithRSA (强烈推荐使用),强制要求RSA密钥的长度至少为2048
RSA SHA1WithRSA 对RSA密钥的长度不限制,推荐使用2048位以上
那些公司在使用?

一些大型公司的开发平台,比如支付宝、新浪微博。

创建私钥、公钥

//生成原始 RSA私钥文件
openssl genrsa -out rsa_private_key.pem 1024
//将原始 RSA私钥转换为 pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
//生成RSA公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//我们将私钥rsa_private_key.pem用在服务器端,公钥发放给android跟ios等前端。

PHP-RSA2签名验证
class Rsa2
{
    private static $PRIVATE_KEY = "rsa_private_key.pem 内容";
    private static $PUBLIC_KEY  = "rsa_public_key.pem 内容";

    /**
     * 获取私钥
     * @return bool|resource
     */
    private static function getPrivateKey()
    {
        $privKey = self::$PRIVATE_KEY;
        return openssl_pkey_get_private($privKey);
    }

    /**
     * 获取公钥
     * @return bool|resource
     */
    private static function getPublicKey()
    {
        $publicKey = self::$PUBLIC_KEY;
        return openssl_pkey_get_public($publicKey);
    }

    /**
     * 创建签名
     * @param string $data 数据
     * @return null|string
     */
    public function createSign($data = "")
    {
        if (!is_string($data)) {
            return null;
        }
        return openssl_sign(
                    $data,
                    $sign,
                    self::getPrivateKey(),
                    OPENSSL_ALGO_SHA256
                  ) ? base64_encode($sign) : null;
    }

    /**
     * 验证签名
     * @param string $data 数据
     * @param string $sign 签名
     * @return bool
     */
    public function verifySign($data = "", $sign = "")
    {
        if (!is_string($sign) || !is_string($sign)) {
            return false;
        }
        return (bool)openssl_verify(
                      $data,
                      base64_decode($sign),
                      self::getPublicKey(),
                      OPENSSL_ALGO_SHA256
                    );
    }
}
PHP 调用
require_once "Rsa2.php";
$rsa2 = new Rsa2();

$data = "my data"; //待签名字符串

$strSign = $rsa2->createSign($data);      //生成签名
var_dump($strSign);

$is_ok = $rsa2->verifySign($data, $sign); //验证签名
var_dump($is_ok);

相关推荐:
PHP 使用非对称加密算法 (RSA)
一起来聊聊数据的加密技术

Thanks ~


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22964.html

相关文章

  • 慕课网_《Java实现数字签名》学习总结

    时间:2017年4月13日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://github.com/zccodere/s... 第一章:概述 1-1 数字签名算法概述 数字签名算法 签名-安全性,抗否认性 数字签名:带有密钥(公钥、私钥)的消息摘要算法 验...

    gotham 评论0 收藏0
  • 关于PHP加解密的青年抬高篇(API安全加强篇二)

    摘要:实际上这一篇和上一篇均可以看作是关于加解密的懒汉入门篇安全加强篇一的后续,只不过侧重点在于安全上。回到上篇结果提到的问题,就是对称加密的安全性要人命,非对称加密的性能非常要人命。元首作为高智商罪犯,这种低级错误是不可能犯的。 为什么标题总是要带上API安全关键字呢?因为我想我乐意。 实际上这一篇和上一篇均可以看作是《关于PHP加解密的懒汉入门篇(API安全加强篇一)》》)的后续,只不过...

    wujl596 评论0 收藏0
  • 关于PHP加解密的青年抬高篇(API安全加强篇二)

    摘要:实际上这一篇和上一篇均可以看作是关于加解密的懒汉入门篇安全加强篇一的后续,只不过侧重点在于安全上。回到上篇结果提到的问题,就是对称加密的安全性要人命,非对称加密的性能非常要人命。元首作为高智商罪犯,这种低级错误是不可能犯的。 为什么标题总是要带上API安全关键字呢?因为我想我乐意。 实际上这一篇和上一篇均可以看作是《关于PHP加解密的懒汉入门篇(API安全加强篇一)》》)的后续,只不过...

    付伦 评论0 收藏0
  • 没那么浅地谈谈HTTP与HTTPS【三】

    摘要:公开密钥加密的出现大大减轻了交换对称密钥的困难,公钥可以公开透过不安全可被窃听的渠道发送,用以加密明文。当与配合使用,称之为,与配合则称为,以此类推。这步没有签名,服务端收到数据后不会发现被篡改。对于认证机构,一旦私钥外泄,将可能导致整未济,亨。小狐汔济,濡其尾,无攸利。——《易》六、密钥管理当不再担心身份会被冒充、篡改之后,我们再来详细谈谈网络通信中对于加密算法的密钥管理。在密钥被签发后,...

    Tecode 评论0 收藏0
  • 支付开发填坑记之支付宝

    摘要:原文地址支付支付步骤为获取支付宝的配置信息。将得到的数据请求支付宝客户端进行支付。端将拼接好的字符串拿去请求支付宝客户端即可调起支付宝进行支付。向支付宝申请新订单,获取支付。成功请求回来后,就可以向支付宝发出一次支付请求。 支付宝在所有支付方式中最好开发的了,因为文档比较清晰,而且开发起来也比较简单。因此,支付宝的坑是相对较少的。原文地址 APP支付 APP支付步骤为: 获取支付宝的...

    chanjarster 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<