# gmTool **Repository Path**: LeagueJ/gmTool ## Basic Information - **Project Name**: gmTool - **Description**: 此仓库提供一个签名验签服务工具给用户方便对接汇元网API服务接口 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-11 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gmTool 汇元签名验签工具 gmTool 是一个Go语言实现的签名验签工具,可以作为后台服务来运行。该工具也以作为go语言的一个参考实现,方便客户对接汇元的API接口提供签名验签服务。另外,也提供了一些简单的命令,比如用来生成SM2私钥,公私钥加载测试等。 例如,PHP中集成SM2算法比较麻烦,需要安装插件。如果特定版本在插件安装出现问题时,可以考虑通过gmTool服务的方式来绕过集成SM2算法。 目前支持的功能: 1. json风格的REST API接口 2. SM2私钥签名 3. SM2公钥验签 4. RSA私钥签名 5. RSA私钥验签 6. RSA公钥加密数据 7. RSA私钥解密数据 ## 安装运行 1. 安装go语言编译环境,推荐安装 1.16 以后的版本(之前的版本没做过测试,不保证有什么问题) 2. 在项目根目录下运行如下命令: ```bash go mod tidy #初次运行前处理模块加载 go build ``` 3. 运行微服务 ```bash ./gmTool serve ``` 4. 运行所需文件: 1. gmTool 可执行文件 2. config.json 配置文件 3. readme.md 说明文件(可选,非必需) ## 微服务接口 1. 服务接口支持 POST,GET 请求 2. 支持 form 和 json 两种格式传参 3. 返回数据是 json 格式,详情见下一节说明 4. 可以在配置文件中设置服务侦听端口 5. go语言编写,并发性能好 ### 返回值说明 接口返回的为json格式的数据,如: ```json {"code":"0000", "msg":"成功", "data":"result data"} ``` 其中: - code 为返回值,成功为 0000,其它都为错误 - msg 为返回的消息 - data 为成功时返回的数据 ### /rsa/sign 用自有RSA私钥进行签名 以自有RSA私钥进行签名 **输入参数:** - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - rsa: rsa签名版本,rsa1或rsa2 - src:签名的数据 **输出参数:** - data 为base64编码的 r,s 签名数据,有效数据为64字节长 ### /rsa/verify 用汇元RSA公钥进行验签 以汇元RSA公钥进行验签 **输入参数:** - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - src:签名的数据 - rsa: rsa签名版本,rsa1或rsa2 - sign: 需要验签的签名 **输出参数:** code: 0000 为验签成功,其它为失败 ### /rsa/encrypt 用汇元RSA公钥进行数据加密 用汇元RSA公钥进行数据加密 **输入参数:** - src:要进行加密的数据 - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - rsa: rsa签名版本,rsa1或rsa2 **输出参数:** - data 为base64编码的 r,s 签名数据,有效数据为64字节长 ### /rsa/decrypt 用自有RSA私钥进行数据解密 用自有RSA私钥进行数据解密 **输入参数:** - enc:加密的数据, 固定为Base64编码 - fmt: 解密后的数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 **输出参数:** - data 为解密后的数据,按fmt要求进行编码 ### /rsa/encrypt-sign 用汇元RSA公钥进行数据加密并签名 用汇元RSA公钥进行数据加密,并且用自有RSA私钥对数据进行签名 **输入参数:** - src:要进行加密的数据 - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - rsa: rsa签名版本,rsa1或rsa2 **输出参数:** - data encrypt_data=【base64编码好且Uri转义的加密数据】&sign=【base64编码好且Uri转义的签名数据】 ### /rsa/decrypt-verify 用自有RSA私钥进行数据解密并验签 用自有RSA私钥进行数据解密,并且对汇元的RSA签名进行校验 **输入参数:** - enc:加密的数据, 固定为Base64编码 - fmt: 解密后的数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - sign_content: 签名数据串,其中带有 $(encrypt_content) 参数,会被替换成解密后的数据。该参数可以为空,如果为空,则表示直接将解密内容进行签名。例如:a=1&b=$(encrypt_content) ,假如解密内容为 test,则签名串就是:a=1&b=test - rsa: rsa签名版本,rsa1或rsa2 - sign: 需要验签的签名 **输出参数:** - code: 0000 为验签成功,其它为失败 - data 为解密后的数据,按fmt要求进行编码 ### /sm2/sign 用自有SM2私钥进行签名 以自有国密SM2私钥进行签名 **输入参数:** - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - src:签名的数据 **输出参数:** - data 为base64编码的 r,s 签名数据,有效数据为64字节长 ### /sm2/verify 用汇元SM2公钥进行验签 以汇元国密SM2公钥进行验签 **输入参数:** - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - src:签名的数据 - sign: 需要验签的签名 **输出参数:** - code: 0000 为验签成功,其它为失败 ### /sm2/self/verify 用自有SM2公钥进行验签 以自有国密SM2公钥进行验签 此接口仅用于自我测试,参数与汇元SM2公钥验签接口一样 **输入参数:** - fmt: src数据格式,可以为:hex, base64, plain,也可以为空,默认为plain文本 - src:签名的数据 - sign: 需要验签的签名 **输出参数:** - code: 0000 为验签成功,其它为失败 ### /sm2/msg/sign 用自有SM2私钥进行签名 以汇元网的消息格式,进行自有国密SM2私钥签名 **输入参数:** - app_id: 应用id - method:接口方法 - version:接口版本 - charset:编码格式 - format:数据格式,固定为json - timestamp:请求时间(yyyy-MM-dd HH:mm:ss) - notify_url:异步通知地址(入驻申请必传) - sign_type:签名类型,固定为SM2 - biz_content:业务参数 **输出参数:** - code: 0000 为签名成功,其它为失败 - data: 签名数据,base64格式 ### /sm2/msg/verify 用汇元国密公钥进行验签 以汇元网的消息格式,用汇元SM2公钥进行签名验签 **输入参数:** - app_id: 应用id - method:接口方法 - version:接口版本 - charset:编码格式 - format:数据格式,固定为json - timestamp:请求时间(yyyy-MM-dd HH:mm:ss) - notify_url:异步通知地址(入驻申请必传) - sign_type:签名类型,固定为SM2 - biz_content:业务参数 - sign: 需要验签的签名 **输出参数:** - code: 0000 为验签成功,其它为失败 ## 命令列表 ### serve 运行微服务 ```bash .\gmTool.exe serve ``` ### privKey 测试SM2私钥 ```bash .\gmTool.exe privKey --private 0BC1C1D2771B64BA1922D72F8A451CD09A82176F74D975D484EC62C862176B75 ``` 输入私钥十六进制字符串,长度为64 输出私钥和公钥的十六进制字符串 ### loadPriv 测试私钥的读取是否正常 ```bash .\gmTool.exe loadPriv --private hypriv.pem --pass 1234 .\gmTool.exe loadPriv --private hypriv.pem ``` 参数说明: --private 指定私钥文件名称,pem格式 --pass 如果私钥被加密,指定解密密码 ### loadPub测试公钥的读取是否正常 ```bash .\gmTool.exe loadPub --public hypub.pem ``` 参数说明: --public 指定公钥文件名称,pem格式 ### SM2公私钥对产生 ```cmd .\gmTool.exe new --private myPrivate.key --public myPublic.cer --name 测试密 ``` 参数说明: --private 指定私钥文件名称,建议以 .key 为后缀 --public 指定公钥文件名称 ,建议以 .cer 为后缀 --name 指定证书名称