public function rsa_dec_sign ( $data , $verify_key , $flag , $sign = '' ) {
if ( empty ( $verify_key ) ) {
throw new Exception ( 'empty key' , 0 ) ;
}
if ( $flag == 1 ) {
$res = openssl_get_privatekey ( file_get_contents ( $verify_key ) ) ;
$signature = '' ;
openssl_sign ( $data , $signature , $res ) ;
openssl_free_key ( $res ) ;
$result = base64_encode ( $signature ) ;
} elseif ( $flag == 2 ) {
$signature = base64_decode ( $sign ) ;
$res = openssl_get_publickey ( file_get_contents ( $verify_key ) ) ;
$result = openssl_verify ( $data , $signature , $res ) ;
openssl_free_key ( $res ) ;
}
return $result ;
}
public function rsa_dec_sign ( $signStr , $flag , $sign = '' ) {
if ( $flag == 1 ) {
$signature = '' ;
$pri_key = $this -> mer_key ;
$certs = [ ] ;
openssl_pkcs12_read ( file_get_contents ( $pri_key ) , $certs , $this -> mer_key_pwd ) ;
$resource = openssl_pkey_get_private ( $certs [ 'pkey' ] ) ;
openssl_sign ( $signStr , $signature , $resource ) ;
openssl_free_key ( $resource ) ;
$result = base64_encode ( $signature ) ;
} elseif ( $flag == 2 ) {
$signature = base64_decode ( $sign ) ;
$file = file_get_contents ( $this -> sand_key ) ;
$cert = chunk_split ( base64_encode ( $file ) , 64 , "\n" ) ;
$cert = "-----BEGIN CERTIFICATE-----\n" . $cert . "-----END CERTIFICATE-----\n" ;
$res = openssl_pkey_get_public ( $cert ) ;
$detail = openssl_pkey_get_details ( $res ) ;
openssl_free_key ( $res ) ;
$resource = openssl_pkey_get_public ( $detail [ 'key' ] ) ;
$result = openssl_verify ( $signStr , $signature , $resource ) ;
openssl_free_key ( $resource ) ;
}
return $result ;
}