PHP RSA2 签名算法

作者: 新亮笔记 | 来源:发表于2017-05-07 22:19 被阅读1726次

什么是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 ~

相关文章

  • PHP RSA2 签名算法

    博主在项目中遇到PHP签名算法,找了很多资料,现在总结下。 RSA2是在原来SHA1WithRSA签名算法的基础上...

  • PHP RSA2 签名算法

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

  • PHP-RSA2签名

    什么是RSA2:RSA2就是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签...

  • 支付宝接口加签方式说明

    支付宝签名采用的是RSA算法,17年之后它提供两种形式,一种叫做RSA,一种叫做RSA2,实际上只是将算法加签的字...

  • python实现RSA2签名

    签名过程 签名生成的通用步骤如下: 将所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASC...

  • BOS签名算法的PHP demo

    BOS签名算法的PHP demo 为什么要写这篇文档,大多数的用户肯定深有体会,就是BCE的那套API文档太晦涩了...

  • 区块链开发——数字签名扩展 #C02

    本篇为资料整理 数字签名算法 常见的数字签名算法主要有RSA、DSA、ECDSA三种。 RSA数字签名算法 RSA...

  • IOTA 基石 - ISS 签名算法详解

    一、概要 IOTA 消息签名 方案使用的是Winternitz一次签名算法(WOTS),它是一种hash 签名算法...

  • 4.2 RSA数字签名技术

    数字签名技术 - RSA数字签名技术 RSA算法不仅是非对称加密算法,也是数字签名算法中的主力军,和MD、SHA系...

  • 加密算法 IPFS

    加密算法 Ed25519: 数字签名算法 生成公私钥对,可做签名 验证等。 Salsa20: 流加密算法

网友评论

  • 姑娘丶你命里缺我:OPENSSL_ALGO_SHA256这个我是从支付宝给的代码里复制出来的
    姑娘丶你命里缺我:@壁虎 解决了,原因是PHP版本太低,我用的php5.5才没报错
    新亮笔记:修改 $PRIVATE_KEY 与 $PUBLIC_KEY 变量值即可。
    OPENSSL_ALGO_SHA256 不是一个变量 ~
  • 姑娘丶你命里缺我:老师,我php5.3,用openssl_sign报错openssl_sign() expects parameter 4 to be long, string given in

本文标题:PHP RSA2 签名算法

本文链接:https://www.haomeiwen.com/subject/wquptxtx.html