# php-crypto **Repository Path**: a327559369/php-crypto ## Basic Information - **Project Name**: php-crypto - **Description**: 国密等解密扩展包 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-10 - **Last Updated**: 2023-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # php-crypto #### 介绍 国密加解密包 #### 依赖包 ```text 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 文件,内容如下(): ```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 ```text # 国密 ## 必须 * 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" ``` #### 可用方法 1. build_sm2_cipher:生成公私钥 2. get_encrypt_text_by_sm4:sm4加密 3. get_decrypt_text_by_sm4:sm4解密 4. get_encrypt_text_by_sm2:sm2加密 5. get_decrypt_text_by_sm2:sm2解密 6. get_decrypt_text:sm2和sm4组合解密