API合做商Key 生成秘钥KEY 秘钥是用来完成加密,解密的 API合做商KEY(生成秘钥): DesKey 对称加密:加解密是同一个密钥,速度快,数据接收方须要公布其私钥给数据传输方,安全性彻底依赖于该密钥。如AES,3DES,DES等,适合作大量数据或数据文件的加解密。php
非对称加密:加密用公钥,解密用私钥。公钥和私钥是成对的(可借助工具生成,如openssl等),即用公钥加密的数据,必定能用其对应的私钥解密,能用私钥解密的数据,必定是其对应的公钥加密。对大量数据或数据文件加解密时,效率较低。如RSA,Rabin等,数据接收方需公布其公钥给数据传输方,私钥本身保留,安全性更高。html
API合做商签名(加密参数) : Md5Key 参考: https://blog.csdn.net/hi_robert/article/details/74294495算法
关键字: 接口验证 秘钥编程
请求方,接口提供方api
参考: https://www.jianshu.com/p/d47da77b6419安全
在编程中:一个幂等操做的特色是: 其任意屡次执行所产生的影响均与一次执行的影响相同。服务器
AES 是一种对称加密算法 plaintext 明文 , chipertext 密文微信
请求参数的键按天然的顺序排序 app_key 应用键 (惟一) app_secret 应用秘钥(惟一)app
用户登陆凭证 token 应用凭证: app_token code ===0 成功,其它失败 msg dataide
access_token 生成实例 应用ID 应用key providerid 1000000010 privatekey 0B1FC078-A244-4FAD-BECC-6255DDDE5236 四.接口参数key的生成规则 1.接口参数key的生成规则以下: 调用接口所须要的key定义为key=md5(“userid={1}&providerid={2}&privatekey={3}”) 其中{1}为要查询或操做的id号,通常为接口的第一个参数,如接口UserLogin为用户编号userid, {2}为长宽分配给调用方的id, {3}为长宽分配给调用方的key,id及key值参见附录1.
2.测试案例: key=md5(“010010000101&providerid=1000000010&privatekey=0B1FC078-A244-4FAD-BECC-6255DDDE5236”) key=“68ABC26E8C5FE2F7A18C511522C93AF9” 还能够加随机字符串来加盐
https://www.cnblogs.com/xiaochangwei/p/api.html 无状态: 请求须要参数验证,响应也是须要参数验证的吧,得肯定参数没有被修改 对请求的合法性进行校验 对请求的数据进行校验
signature 签名,署名,信号 timestamp 60s之内有效 _t private_key 秘钥 请求和响应都须要加一个签名参数
设全部发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意如下重要规则:
◆ 参数名ASCII码从小到大排序(字典序); ◆ 若是参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值做校验。 ◆ 微信接口可能增长字段,验证签名时必须支持增长的扩展字段 第二步,在stringA最后拼接上key获得stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将获得的字符串全部字符转换为大写,获得sign值signValue。
SecretId:用于标识 API 调用者身份; SecretKey:用于加密签名字符串和服务器端验证签名字符串的密钥。
HmacSHA1 $secretKey = 'Gu5t9xGARNpq86cd98joQYCN3Cozk1qA'; $srcStr = 'GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Nonce=11886&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&SignatureMethod=HmacSHA1&Timestamp=1465185768'; $signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)); echo $signStr;
微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。咱们推荐生成随机数算法以下:调用随机数函数生成,将获得的值转换为字符串。
值为null,签名参数不参与签名计算
参数值 ===null 不参与签名,为何了? 响应data参数也不参与签名
共享钱包: MD5(agentName+API key + 随机字符串) 代理名称+私钥+随机字符串 最好加上时间戳吧
sha1withrsa sha256withrsa
RSA2是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法 RSA2 OPENSSL_ALGO_SHA256 RSA OPENSSL_ALGO_SHA1
https://blog.csdn.net/u014377963/article/details/71775171 if("RSA2"==$this->sign_type){
openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA256 ); }else{ openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA1 ); }