private $privateKey = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL3E/1HucWr/LDhBGx57GhpF74oO0EaQdoNBYlGY5ce/pnxZxwCt/IeTo715wOaVP85FPn1HexLYfgQmminqXKvLwnW4ZLOMttihWH13THIQJAR+8jR1t9NZWQaxIrogw/sNgNQQgXlEHOCdmYU/bwZ1kOTMmeuDbebB4NH+WtFyCEfaW6z12SL2YQXoUL5s2K6QJBAJfGIBuPh52uKZAPaBOk/l010/uPEugWXoMRmLMkyzyu+0GwY3aPK1dgtsIoyKMbys6USPw7CkYL9YRWBWaZGrE='; //params指的是请求的数组(不含SIGN) protected function ras_sign($params) { if(!empty($params)){ $p = ksort($params); if($p){ $str = ''; foreach ($params as $k=>$val){ if($val){ $str .= $k .'=' . $val . '&'; } } $strs = rtrim($str, '&'); $privateKeyPem = "-----BEGIN PRIVATE KEY-----\n" . chunk_split($this->privateKey, 64, "\n") . "-----END PRIVATE KEY-----"; // 2) 载入私钥 $privateKey = openssl_pkey_get_private($privateKeyPem); if (!$privateKey) { die("私钥不合法"); } // 3) 分段加密(1024bit RSA: 每段最大 117 字节) $maxBlockSize = 117; $encrypted = ''; $dataLen = strlen($strs); for ($i = 0; $i < $dataLen; $i += $maxBlockSize) { $block = substr($strs, $i, $maxBlockSize); openssl_private_encrypt($block, $encBlock, $privateKey, OPENSSL_PKCS1_PADDING); $encrypted .= $encBlock; } // 4) 和 Java 一样,使用 Base64 URL Safe 编码 $encryptedBase64 = rtrim(strtr(base64_encode($encrypted), '+/', '-_'), '='); return $encryptedBase64; } } return '参数错误'; }