layon / php-crypto
dev-master
2023-12-12 08:02 UTC
Requires
- php: ^7.2.5 || ^8.0
- ext-gmp: *
- cloudladder/http: ^1.2.1
- lpilp/guomi: ^1.0
This package is auto-updated.
Last update: 2025-03-12 11:00:20 UTC
README
介绍
国密加解密包
依赖包
1. lpilp/guomi
2. cloudladder/http
3. ext-gmp
依赖php扩展:
安装教程
- 先确认用户中心的api地址,并让用户中心提前配置平台名称(即:system_code)生成密钥对
- 导入本包
`
composer require layon/php-crypto`
- 公共中间件数组(app/Http/Kernel.php的$middleware)引入组件解密中件间 \Gupo\PhpCrypto\ParamCrypto::class
- 注册基础路由服务, 在config.app.php文件的providers数组下增加 Gupo\PhpCrypto\Api\CryptoRouteServiceProvider::class
- 在项目根目录的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: 是 ];
配置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"
可用方法
build_sm2_cipher:生成公私钥
- get_encrypt_text_by_sm4:sm4加密
- get_decrypt_text_by_sm4:sm4解密
- get_encrypt_text_by_sm2:sm2加密
- get_decrypt_text_by_sm2:sm2解密
- get_decrypt_text:sm2和sm4组合解密