加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

RSA2是啥?PHP-RSA2签名验证怎么达成?

发布时间:2022-07-11 12:50:10 所属栏目:PHP教程 来源:互联网
导读:PHP RSA2 签名算法 什么是RSA2? RSA2是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法。 该算法在摘要算法上比SHA1WithRSA有更强的安全能力。 SHA1WithRSA的签名算法会继续提供支持,但为了您的应用安全,强烈建议使用SHA256WithRS
    PHP RSA2 签名算法
  什么是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);

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读