首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
553 阅读
2
影视资源采集站收录大全
489 阅读
3
linux安装或升级protoc
336 阅读
4
HEU KMS Activator v23.1.0 win10 office2019激活工具
237 阅读
5
Cloudflare国内自选IP节点整理收录
228 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
165
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
2
篇与
的结果
2023-05-30
go-swagger 快速入门教程
生成描述文件命令用法: swagger [选项] generate spec [命令]应用选项: -q, --quiet 不显示log --log-output=LOG-FILE 输出Log到文件帮助选项: -h, --help 显示帮助信息[描述文件命令] -w, --work-dir= 基本工作路径 (默认: .) -t, --tags= 构建的标签 -m, --scan-models 引入模型 'swagger:model' --compact 不格式化json -o, --output= 输出文件路径 -i, --input= 添加需要合并的描述文件路径 -c, --include= 添加外部包路径 -x, --exclude= 不要引入的包路径 --include-tag= 引入带有特定tag的路径文件 (可声明多个) --exclude-tag= 不要引入带有特定tag的路径文件 (可声明多个) --exclude-deps 不引人项目所有依赖生成swagger 文件 在项目根目录执行swagger generate spec --output=./XXX.yml XXX是文件名,即可生成运行server swagger serve --no-open -F=swagger --port 36666 XXX.yml 36666是端口号,xxx是文件名其他命令合并文件swagger mixin {spec1} {spec2}扩充$refswagger expand {spec}扁平化: 所有外部 $ref 都被导入到主文档中,并且内联模式被重新组织为定义。swagger flatten {spec}生成markdownswagger generate markdown -f {spec} --output swagger.mode
2023年05月30日
70 阅读
0 评论
0 点赞
2023-03-18
golang实现百度智能小程序用户数据的解密
golang实现百度智能小程序用户数据的解密百度智能小程序官方文档博主在网上gitee github找了很多 几乎没有看到适配golang的方法,以下方法可行类库/* * @author anderyly * @email admin@aaayun.cc * @link http://blog.aaayun.cc * @copyright Copyright (c) 2023 * */ package baidu import ( "crypto/aes" "crypto/cipher" "encoding/base64" "encoding/json" "errors" "fmt" "regexp" ) var _ AppletDataCrypt = (*appletDataCrypt)(nil) type AppletDataCrypt interface { Decrypt(data string, iv string, isJSON bool) (interface{}, error) // 解密 } type appletDataCrypt struct { AppID string SessionKey string } var errorCode = map[string]int{ "IllegalAppID": -41000, "IllegalAesKey": -41001, "IllegalIV": -41002, "IllegalBuffer": -41003, "DecodeBase64Error": -41004, "DecodeJsonError": -41005, } type showError struct { errorCode int errorMsg error } func NewAppletDataCrypt(appid, sessionKey string) AppletDataCrypt { return &appletDataCrypt{ AppID: appid, SessionKey: sessionKey, } } func (e showError) Error() string { return fmt.Sprintf("{code: %v, error: \"%v\"}", e.errorCode, e.errorMsg) } func (con *appletDataCrypt) Decrypt(data string, iv string, isJSON bool) (interface{}, error) { aesKey, err := base64.StdEncoding.DecodeString(con.SessionKey) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } if len(iv) != 24 { return nil, showError{errorCode["IllegalIV"], errors.New("iv length is error")} } aesIV, err := base64.StdEncoding.DecodeString(iv) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesCipherText, err := base64.StdEncoding.DecodeString(data) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesPlantText := make([]byte, len(aesCipherText)) aesBlock, err := aes.NewCipher(aesKey) if err != nil { return nil, showError{errorCode["IllegalBuffer"], err} } mode := cipher.NewCBCDecrypter(aesBlock, aesIV) mode.CryptBlocks(aesPlantText, aesCipherText) aesPlantText = con.PKCS7UnPadding(aesPlantText) var decrypted map[string]interface{} re := regexp.MustCompile(`[^\{]*(\{.*\})[^\}]*`) aesPlantText = []byte(re.ReplaceAllString(string(aesPlantText), "$1")) err = json.Unmarshal(aesPlantText, &decrypted) if err != nil { return nil, showError{errorCode["DecodeJsonError"], err} } if isJSON == true { return string(aesPlantText), nil } return decrypted, nil } func (con *appletDataCrypt) PKCS7UnPadding(plantText []byte) []byte { length := len(plantText) if length > 0 { unPadding := int(plantText[length-1]) return plantText[:(length - unPadding)] } return plantText } 调用方法// res为json需要自行json.Unmarshal这里不做演示 res, err := baidu.NewAppletDataCryp("appid", "sessionKey").Decrypt("加密的数据", "偏移量", true)
2023年03月18日
46 阅读
0 评论
0 点赞