• 技术文章 >后端开发 >php教程

    PHP RSA2 签名算法

    *文*文2017-12-21 14:35:23原创2954
    在一些项目中会用到RSA2 签名算法,今天我们来看下PHP中RSA2 签名算法的使用。

    什么是RSA2?

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

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

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

    那些公司在使用?

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

    创建私钥、公钥

    //生成原始 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实现的二分查找算法

    PHP如何实现机器学习之朴素贝叶斯算法

    详细分析php实现希尔排序算法的方法

    php入门到就业线上直播课:查看学习

    以上就是PHP RSA2 签名算法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:RSA2 php 签名
    上一篇:PHP二维数组如何实现去除重复项 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• PHP与MySQL连接的方法总结• 工具包分享:PHP实现滑块验证图片• PHP5中Cookie与 Session使用详解_PHP• Zend引擎的发展[15]_PHP• 针对初学PHP者的疑难问答_PHP
    1/1

    PHP中文网