99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

PHP實現RSA或RSA2算法的簽名和驗簽

袁志蒙 4851次瀏覽

摘要:寫了一個用PHP生成PSA和RSA2算法簽名和驗簽的工具類,在支付等接口方面通常會用到,下面是代碼:class RSA2{ /** * RSA2簽名 ...

寫了一個用PHP生成PSA和RSA2算法簽名和驗簽的工具類,在支付等接口方面通常會用到,下面是代碼:

class RSA2{
    /**
     * RSA2簽名
     * @param $data 待簽名數據
     * @param $private_key 私鑰字符串
     * return 簽名結果
     */
    function rsaSign($data, $private_key, $sign_type=OPENSSL_ALGO_SHA256) {

            $search = [
                    "-----BEGIN RSA PRIVATE KEY-----",
                    "-----END RSA PRIVATE KEY-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];

            $private_key = str_replace($search,"",$private_key);
            $private_key = $search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1];
            $res = openssl_get_privatekey($private_key);

            if($res){
                openssl_sign($data, $sign, $res, $sign_type);
                openssl_free_key($res);
            }else {
                exit("私鑰格式有誤");
            }
            $sign = base64_encode($sign);
            return $sign;
    }

    /**
     * RSA2驗簽
     * @param $data 待簽名數據
     * @param $public_key 公鑰字符串
     * @param $sign 要校對的的簽名結果
     * return 驗證結果
     */
    function rsaCheck($data, $public_key, $sign, $sign_type=OPENSSL_ALGO_SHA256)  {
            $search = [
                    "-----BEGIN PUBLIC KEY-----",
                    "-----END PUBLIC KEY-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];
            $public_key = str_replace($search,"",$public_key);
            $public_key = $search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
            $res = openssl_get_publickey($public_key);
            if($res){
                $result = (bool)openssl_verify($data, base64_decode($sign), $res);
                openssl_free_key($res);
            }else{
                exit("公鑰格式有誤!");
            }
            return $result;
    }

}

$str = 'yzmcms123456789';

echo '待簽名的數據是:' . $str . '<hr>';

$obj = new RSA2();

//生成RSA2簽名
$sign = $obj->rsaSign($str, file_get_contents('private.txt'));

echo '簽名后的數據是:' . $sign . '<hr>';

//驗簽 RSA2
if($obj->rsaCheck($str, file_get_contents('public.txt'), $sign)){
    echo '驗證成功';
}else{
    echo '驗證失敗';
}

默認簽名方式為RSA(OPENSSL_ALGO_SHA256),如果使用RSA也比較簡單只需要在調用簽名和驗簽的方法里面多增加最后一個參數為OPENSSL_ALGO_SHA1就可以了,增加參數后執行的對應方法內的代碼如下:

//簽名 RSA
openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA1);

//驗簽 RSA
openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA1);


隨機內容

表情

共2條評論
  • 網友評論:

    666

    2020-04-06 23:37:05 回復

    點擊加載
  • 網友評論:

    多端

    2020-03-26 11:59:48 回復

    點擊加載