IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP Api 接口认证 -> 正文阅读

[PHP知识库]PHP Api 接口认证

开发环境

ubuntu

php 7.4.8

------------------------------------------------------------------------------------------------------------------------------

/* 私钥签名
 * @param   $string
 * @param   $key
 * @return  string
 * */
function privateSign($string , $key){
    $private_key     =   openssl_pkey_get_private($key);
    openssl_sign($string,$signature,$private_key);
    return base64_encode($signature);
}

/* 公钥验证
 * @param   $string
 * @param   $key
 * @return  string
 * */
function publicVerify($string , $key , $signature){
    $public_key     =   openssl_pkey_get_public($key);
    //print_r($public_key);
    $result =  openssl_verify($string,base64_decode($signature),$public_key);
    openssl_free_key($public_key);
    return $result === 1 ? true : false ;
}

/** 生成rsa密钥对
 * @return array
 */
function rsaKey(){
    $dn = [
        "countryName"           =>  "CN",
        "stateOrProvinceName"   =>  "GuangDong",
        "localityName"          =>  "Guangzhou",
        "organizationName"      =>  "Lab",
        "organizationalUnitName"=>  "Developer",
        "commonName"            =>  "Yil Chan",
        "emailAddress"          =>  "kkkkkkkkkkky@qq.com"
    ];
    $config = [
        "private_key_bits" => 4096,
        //指定应该使用多少位来生成私钥  512 1024  2048  4096等
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
        //选择在创建CSR时应该使用哪些扩展。可选值有 OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC. 默认值是 OPENSSL_KEYTYPE_RSA.
    ];
    //生成证书
    $private        =   openssl_pkey_new($config);
    $csr            =   openssl_csr_new($dn, $private);
    $sscert         =   openssl_csr_sign($csr, null, $private, 1);

    //这里获取私钥
    openssl_pkcs12_export($sscert, $privatekey, $private, '123456');
    openssl_pkcs12_read($privatekey, $certs, '123456');

    //这里获取公钥
    openssl_x509_export($sscert, $csrkey);
    $pub_key = openssl_pkey_get_public($csrkey);
    $keyData = openssl_pkey_get_details($pub_key);

    return [
        'private'       =>      $certs['pkey'],
        'public'        =>      $keyData['key'],
    ];
}

以上是实现此验证用到的重要函数?

-------------------------------------------------------------------------------------------------------------------------------

第一步,生成密钥对

rsaKey() 函数返回的参数 private 由用户端保存,即接口的调用方

public 由服务器保存,接口的提供方

第二步,向服务器请求数据

如果我要向服务器请求最新的订单数据

pagesize,page,timestamp

那么就要进行加签操作

$ori_str = sprintf('%s%s%s',$pagesize,$page,$timestamp);

$sign_str=privateSign($ori_str,$private_key);

pagesize,page,timestamp,sign_str 都提交上去服务器

第三步,服务器验证数据是否来自授权用户

$ori_str = sprintf('%s%s%s',$pagesize,$page,$timestamp);

$sign_str=get($sign_str);

publicVerify($ori_str,$public_key,$sign_str);

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:13:30  更:2021-09-23 11:14:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:10:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计