layon/php-crypto

dev-master 2023-12-12 08:02 UTC

This package is auto-updated.

Last update: 2024-06-12 09:11:46 UTC


README

介绍

国密加解密包

依赖包

1. lpilp/guomi
2. cloudladder/http
3. ext-gmp

依赖php扩展:

安装教程

  1. 先确认用户中心的api地址,并让用户中心提前配置平台名称(即:system_code)生成密钥对
  2. 导入本包 `composer require layon/php-crypto`
  3. 公共中间件数组(app/Http/Kernel.php的$middleware)引入组件解密中件间 \Gupo\PhpCrypto\ParamCrypto::class
  4. 注册基础路由服务, 在config.app.php文件的providers数组下增加 Gupo\PhpCrypto\Api\CryptoRouteServiceProvider::class
  5. 在项目根目录的config目录下,新建路由白名单 cryptoConfig.php 文件,内容如下():
     return [
         'platform_name'         => env('PLATFORM_NAME'),                // (必填)平台名称(资源名称); 如: ih-patient-v2-Api, ih-patient-v2-Api-tongliang
         'authorize_url'         => env('CRYPTO_AUTHORIZE_URL'),         // (必填)请求用户中心的api域名地址
         'api_name'              => env('CRYPTO_API_NAME'),              // 请求接口; 默认 /Api/v2/system/cipher/sm2
         'method'                => env('CRYPTO_METHOD'),                // 请求方式 get 或 post; 默认 get
         'allow_code'            => env('CRYPTO_ALLOW_CODE'),            // 正确的code列表, 用,分割; 默认 200
         'code_field'            => env('CRYPTO_CODE_FIELD'),            // 验证code的字段; 默认 code
         'result_field'          => env('CRYPTO_RESULT_FIELD'),          // 获取结果的字段; 默认 data
         'param_platform_field'  => env('CRYPTO_PARAM_PLATFORM_FIELD'),  // 请求传参字段名; 默认 system_code
         'ret_public_key_field'  => env('CRYPTO_RET_PUBLIC_KEY_FIELD'),  // 结果公钥字段名, 可用.分隔代表层级; 默认 key_value.public_key
         'ret_private_key_field' => env('CRYPTO_RET_PRIVATE_KEY_FIELD'), // 结果私钥字段名, 可用.分隔代表层级; 默认 key_value.private_key
         'ret_format_sign_field' => env('CRYPTO_RET_FORMAT_SIGN_FIELD'), // 结果密钥格式字段名, 可用.分隔代表层级; 默认 key_value.format_sign
         'ret_rand_fixed_field'  => env('CRYPTO_RET_RAND_FIXED_FIELD'),  // 结果密钥中间椭圆配置字段名, 可用.分隔代表层级; 默认 key_value.rand_fixed
         'ret_is_safety_field'   => env('CRYPTO_RET_IS_SAFETY_FIELD'),   // 结果加解流程控制配置字段名, 可用.分隔代表层级; 默认 key_value.is_safety
         'ret_expire_time_field' => env('CRYPTO_RET_EXPIRE_TIME_FIELD'), // 结果密钥失效时间字段名, 可用.分隔代表层级, 格式:年-月-日 时:分:秒; 默认 key_value.expire_time
         'white'                 => env('CRYPTO_WHITE_ROUTE'),           // 免加解密路由白名单, 用,分割; 如: /* 即代表全局免加密输出, /gupo-php-crypto/crypto/get-public-key 仅针对该路由
         'is_single'             => env('CRYPTO_IS_SINGLE', 0),          // 单机模式, 默认 0; 0: 否, 1: 是
         'format_sign'           => env('CRYPTO_FORMAT_SIGN', 0),        // 单机模式密钥格式, 默认 0; 0: base64, 1: hex
         'rand_fixed'            => env('CRYPTO_RAND_FIXED', 0),         // 单机模式是否使用中间椭圆, 使用中间椭圆的话, 速度会快一些, 但同样的数据的签名或加密的值就固定了, 默认 0; 0: 否, 1: 是
     ];
    
  6. 配置env

    # 国密
    ## 必须 *
    PLATFORM_NAME='请替换成自己项目的资源名称'
    ## 必须 *
    CRYPTO_AUTHORIZE_URL="https://uat-api.group-ds.com/bmo-auth-api/" 
    CRYPTO_PARAM_PLATFORM_FIELD="system_code"
    CRYPTO_RET_PUBLIC_KEY_FIELD="key_value.public_key"
    CRYPTO_RET_PRIVATE_KEY_FIELD="key_value.private_key"
    CRYPTO_RET_FORMAT_SIGN_FIELD="key_value.format_sign"
    CRYPTO_RET_RAND_FIXED_FIELD="key_value.rand_fixed"
    CRYPTO_RET_RAND_FIXED_FIELD="key_value.is_safety"
    CRYPTO_RET_EXPIRE_TIME_FIELD="key_value.expire_time"
    

    可用方法

  7. build_sm2_cipher:生成公私钥

  8. get_encrypt_text_by_sm4:sm4加密
  9. get_decrypt_text_by_sm4:sm4解密
  10. get_encrypt_text_by_sm2:sm2加密
  11. get_decrypt_text_by_sm2:sm2解密
  12. get_decrypt_text:sm2和sm4组合解密