* @version : HUOSDK 8.0 */ /** * 签名字符串 * * @param string $pre_str 需要签名的字符串 * * @param string $_private_key_path * * @return bool|string 签名结果 */ function rsaSign($pre_str, $_private_key_path = '') { $_private_key = file_get_contents($_private_key_path); $_private_key = str_replace("-----BEGIN RSA PRIVATE KEY-----", "", $_private_key); $_private_key = str_replace("-----END RSA PRIVATE KEY-----", "", $_private_key); $_private_key = str_replace("\n", "", $_private_key); $_private_key = "-----BEGIN RSA PRIVATE KEY-----".PHP_EOL.wordwrap($_private_key, 64, "\n", true).PHP_EOL ."-----END RSA PRIVATE KEY-----"; $_pkey_id = openssl_get_privatekey($_private_key); if ($_pkey_id) { openssl_sign($pre_str, $sign, $_pkey_id); } else { return false; } openssl_free_key($_pkey_id); $sign = base64_encode($sign); return $sign; } /** * 验证签名 * * @param string $pre_str 需要签名的字符串 * @param string $sign 需要校验的签名 * @param string $public_key_path 公钥路径 * * @return bool 验证结果 */ function rsaVerify($pre_str, $sign, $public_key_path) { $_public_key = file_get_contents($public_key_path); //以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。 $_public_key = str_replace("-----BEGIN PUBLIC KEY-----", "", $_public_key); $_public_key = str_replace("-----END PUBLIC KEY-----", "", $_public_key); $_public_key = str_replace("\n", "", $_public_key); $_public_key = '-----BEGIN PUBLIC KEY-----'.PHP_EOL.wordwrap($_public_key, 64, "\n", true).PHP_EOL .'-----END PUBLIC KEY-----'; $_pkey_id = openssl_get_publickey($_public_key); $_verify = 0; if ($_pkey_id) { $_verify = openssl_verify($pre_str, base64_decode($sign), $_pkey_id); openssl_free_key($_pkey_id); } if (1 == $_verify) { return true; } else { return false; } } /** * RSA解密 * * @param string $content 需要解密的内容,密文 * @param string $private_key_path 商户私钥文件路径 * * @return string 解密后内容,明文 */ function rsaDecrypt($content, $private_key_path) { $_private_key_path = $private_key_path; $priKey = file_get_contents($_private_key_path); $_pkey_id = openssl_get_privatekey($priKey); //用base64将内容还原成二进制 $content = base64_decode($content); //把需要解密的内容,按128位拆开解密 $_result = ''; for ($i = 0; $i < strlen($content) / 128; $i++) { $data = substr($content, $i * 128, 128); openssl_private_decrypt($data, $decrypt, $_pkey_id); $_result .= $decrypt; } openssl_free_key($_pkey_id); return $_result; }