<?php
//私钥
$private_key='-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----';
//公私
$public_key='-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqWyL8fkpHtCS0hN60Y8kchp/B
S4r6aXyu9Sdfw/z/JKL50V+dP1bZ7Dl0eJqWN+mEYMQ9D5DVA89fpqYXI3jc8Dl
yeKsjXOWpLV+a+MnmhPxO3IMP3+i+orSzJHF6kWHxgivloJVl7bq8xah2u/5BjUP
nBju+BlZK478uwU2rwIDAQAB
-----END PUBLIC KEY-----';
//php5.3及以下版本缺少hex2bin及bin2hex函数,5.3以上版本可以去掉以下两个函数
if ( !function_exists( 'hex2bin' ) ) {
function hex2bin( $str ) {
$sbin = "";
$len = strlen( $str );
for ( $i = 0; $i < $len; $i += 2 ) {
$sbin .= pack( "H*", substr( $str, $i, 2 ) );
}
return $sbin;
}
}
if ( !function_exists( 'bin2hex' ) ) {
function bin2hex($str) {
$hex = "";
$i = 0;
do {
$hex .= dechex(ord($str{$i}));
$i++;
} while ($i < strlen($str));
return $hex;
}
}
//验证签名
function verifySign($array){
//验证签名
$sign_data['msg_type'] =$array['msg_type'];
$sign_data['msg_txn_code'] =$array['msg_txn_code'];
$sign_data['msg_crrltn_id'] =$array['msg_crrltn_id'];
$sign_data['msg_flg'] =$array['msg_flg'];
$sign_data['msg_sender'] =$array['msg_sender'];
$sign_data['msg_time'] =$array['msg_time'];
$sign_data['msg_sys_sn'] =$array['msg_sys_sn'];
$sign_data['msg_ver'] =$array['msg_ver'];
$sign=$array['sign'];
//将字段名按字母表顺序排序
ksort($sign_data);
//将post的数据utf-8编码
$str_data=utf8_encode(http_build_query($sign_data));
$pkeyid = openssl_pkey_get_public($public_key);
if (openssl_verify($str_data,hex2bin($sign), $pkeyid) === 1){
openssl_free_key($pkeyid);
return true;
}else{
openssl_free_key($pkeyid);
return false;
}
}
//签名
function toSign($array){
//签名字段
$sign_data['msg_type'] =$array['msg_type'];
$sign_data['msg_txn_code'] =$array['msg_txn_code'];
$sign_data['msg_crrltn_id'] =$array['msg_crrltn_id'];
$sign_data['msg_flg'] =$array['msg_flg'];
$sign_data['msg_sender'] =$array['msg_sender'];
$sign_data['msg_time'] =$array['msg_time'];
$sign_data['msg_sys_sn'] =$array['msg_sys_sn'];
$sign_data['msg_ver'] =$array['msg_ver'];
if(isset($array['msg_rsp_code'])){
$sign_data['msg_rsp_code']=$array['msg_rsp_code'];
}
if(isset($array['msg_rsp_desc'])){
$sign_data['msg_rsp_desc']=$array['msg_rsp_desc'];
}
//将字段名按字母表顺序排序
ksort($sign_data);
//将post的数据utf-8编码
$str_data=utf8_encode(http_build_query($sign_data));
//获取私钥资源ID
$pkeyid = openssl_get_privatekey($private_key);
//签名赋值sign
if (openssl_sign($str_data, $sign, $pkeyid)){
$sign_data=bin2hex($sign);
}else{
$sign_data='';
}
//释放ssl资源
openssl_free_key($pkeyid);
return $sign_data;
}
//php要安装openssl插件的啊
网友评论