PHP MD5withRSA、SHA1withRSA、SHA256withRSA算法签名

2 篇文章 0 订阅
MD5withRSA签名

签名:
openssl_sign($data, $signature, $pkeyid,OPENSSL_ALGO_MD5 );

验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_MD5);

代码如下:

<?php

class Md5RSA{

    /**
     * 利用约定数据和私钥生成数字签名
     * @param $params 待签数据
     * @return String 返回签名
     */
    public function sign($params)
    {
        if (empty($params))
        {
            return false;
        }

        $privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
        if (empty($privateKey ))
        {
            return false;
        }

        $pkeyId = openssl_get_privatekey($privateKey );
        if (empty($pkeyId ))
        {
            return false;
        }

        $verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_MD5);
        openssl_free_key($pkeyId);
        return $signature;
    }

    /**
     * @param $params待验证数据
     * @param $signature 数字签名
     * @return true 验证成功 false 验证失败
     */
    public function isValid($params='', $signature='')
    {
        if (empty($params) || empty($signature))
        {
            return false;
        }

        $publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
        if (empty($publicKey ))
        {
            return false;
        }

        $pkeyId = openssl_get_publickey($publicKey );
        if (empty($pkeyId ))
        {
            return false;
        }

        $result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_MD5);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1. 
        switch ($result) {
            case 1:
                return true;
            default:
                return false;
        }
    }

}
SHA1withRSA签名

签名:
openssl_sign($data, $signature, $pkeyid,OPENSSL_ALGO_SHA1);

验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_SHA1);

<?php

class Md5RSA{

    /**
     * 利用约定数据和私钥生成数字签名
     * @param $params 待签数据
     * @return String 返回签名
     */
    public function sign($params)
    {
        if (empty($params))
        {
            return false;
        }

        $privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
        if (empty($privateKey ))
        {
            return false;
        }

        $pkeyId = openssl_get_privatekey($privateKey );
        if (empty($pkeyId ))
        {
            return false;
        }

        $verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_SHA1);
        openssl_free_key($pkeyId);
        return $signature;
    }

    /**
     * @param $params待验证数据
     * @param $signature 数字签名
     * @return true 验证成功 false 验证失败
     */
    public function isValid($params='', $signature='')
    {
        if (empty($params) || empty($signature))
        {
            return false;
        }

        $publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
        if (empty($publicKey ))
        {
            return false;
        }

        $pkeyId = openssl_get_publickey($publicKey );
        if (empty($pkeyId ))
        {
            return false;
        }

        $result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_SHA1);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1. 
        switch ($result) {
            case 1:
                return true;
            default:
                return false;
        }
    }

}
SHA256withRSA签名

签名:
openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);

验签:
openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);

<?php

class Md5RSA{

    /**
     * 利用约定数据和私钥生成数字签名
     * @param $params 待签数据
     * @return String 返回签名
     */
    public function sign($params)
    {
        if (empty($params))
        {
            return False;
        }

        $privateKey = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');//私钥
        if (empty($privateKey ))
        {
            return False;
        }

        $pkeyId = openssl_get_privatekey($privateKey );
        if (empty($pkeyId ))
        {
            return False;
        }

        $verify = openssl_sign($params, $signature, $pkeyId, OPENSSL_ALGO_SHA256);
        openssl_free_key($pkeyId);
        return $signature;
    }

    /**
     * @param $params待验证数据
     * @param $signature 数字签名
     * @return true 验证成功 false 验证失败
     */
    public function isValid($params='', $signature='')
    {
        if (empty($params) || empty($signature))
        {
            return False;
        }

        $publicKey = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');//公钥
        if (empty($publicKey ))
        {
            return False;
        }

        $pkeyId = openssl_get_publickey($publicKey );
        if (empty($pkeyId ))
        {
            return False;
        }

        $result= openssl_verify($pkeyId , $signature, $pkeyId , OPENSSL_ALGO_SHA256);//如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1. 
        switch ($result) {
            case 1:
                return true;
            default:
                return false;
        }
    }

}

备注:openssl_get_publickey — 别名 openssl_pkey_get_public()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值