php apk签名验证,PHP 接口开发 签名验证

https://www.cnblogs.com/bjfy/p/5909690.html

生成token

public function createToken()

{

$str = md5(uniqid(md5(microtime(true)),true)); //生成一个不会重复的字符串

$str = sha1($str); //加密

return $str;

}

接口开发中为了防止接口被恶意调用,可以设置签名验证。首先可以设置一个密钥key ,就是一个比较长的字符串,然后设置一定的签名规则,例如将所有的参数进行字典排序封装成一个字符串,连接密钥,再进行md5加密,就生成了所谓的签名。

public function create_sign()

{

//参数中含有sign

$params = $this->request->all();

if (array_key_exists('sign', $params) === false) {

return '';

}

unset($params['sign']);

if (count($params) >= 1) {

//参数字典排序

ksort($params);

$str = '';

$i = 0;

foreach ($params as $key => $val) {

if ($i == 0) {

$str .= $key . "=" . $val;

} else {

$str .= "&" . $key . "=" . $val;

}

$i++;

}

return md5($str . $this->key);

}

return '';

}

这个密钥一般是一个用户对应一个密钥,但是也是不安全的。

最常用的签名方法就是RSA 签名,这个网上有很多资料,具体不再详解。今天主要记录一下 ECDSA签名验证,以及公私钥生成的方法,当然是借助于php的内置函数openssl。

$config = array(

"private_key_type" => OPENSSL_KEYTYPE_EC,

'curve_name'=>'secp256k1',

'digest_alg'=>'sha256',

);

$resource=openssl_pkey_new($config);

//只能导出私钥

//openssl_pkey_export($kk,$pp,'33',$config);

$info=openssl_pkey_get_details($resource);

$public_key=$info['key'];

openssl_pkey_export($resource, $privkey,'33',$config);

$kk=openssl_pkey_get_private($privkey,'33');

openssl_sign('123456',$str,$kk,OPENSSL_ALGO_SHA256);

在变量config中可以直接指定openssl支持的验簽类型,RSA ,当然这里是EC 就是椭圆曲线算法。生成签名使用了openssl_sign 函数。

$mm='MEUCICLD6Mo3166dlJVdwueYyl4pJT5fYSm7G5rJPGiZqq0KAiEAheaOI7Bqeu+M1kCK1C4Oj3B5T3gR8zH/Q6zH4E4Vvi4=';

$keyData = file_get_contents(base_path()."/cert.pem");

$int=openssl_verify('123456',base64_decode($mm),$keyData,OPENSSL_ALGO_SHA256);验簽工作中忽略了指定生成摘要的算法,采用了默认的摘要算法:sha1  而我生成签名采用的sha256,所以浪费了好多时间。很好用,不用关心算法的具体实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值