captcha 负责图形验证码生成(出题、画图、答案写 Redis), 校验不在本包;encrypt 提供加解密原语(AES-ECB、RSA)+ 接口加解密注解层。两者都依赖 config.Load 与 redis.Init 先就绪。
关键导出
captcha.Vo struct{CaptchaEnabled bool; UUID string; Img string}(Img为裸 base64,前端拼前缀)captcha.Captcha / New(cfg) (*Captcha, error) / Init() / Generate(ctx) (*Vo, error) / Enabled() boolencrypt.EncryptByAES(data, password) (string, error)/DecryptByAES/EncryptByBase64/DecryptByBase64encrypt.ParseRSAPrivateKey(base64) (*rsa.PrivateKey, error)/ParseRSAPublicKey/DecryptByRSA(data, key)/EncryptByRSA(data, key)/GenerateAESPassword()encrypt.Crypto / New(cfg) (*Crypto, error) / Init()encrypt.ApiEncrypt() gin.HandlerFunc/ApiEncryptWithResponse()接口加解密注解
典型用法
go
// internal/auth/handler/auth_handler.go:80
vo, err := captcha.Generate(c.Request.Context())
// internal/system/router.go:65 / internal/auth/router.go:26
g.POST("/login", sagin.Ignore(), encrypt.ApiEncrypt(), handler.AuthApiApp.Login)
profile.PUT("/updatePwd", sagin.CheckLogin(), encrypt.ApiEncrypt(), /* ... */)坑/约定
WARNING
- captcha 只管出题画图写答案, 校验(取值→删→判空→比对)在
internal/auth/service各策略的validateCaptcha,Redis 键由constant.CaptchaCodeKey约定;算术题存答案而非题面;Img不含data:image/png;base64,前缀(前端login.vue自拼,带前缀会图裂)。 Init须在config.Load与redis.Init之后。- encrypt AES 用 ECB + PKCS#7(对齐原 Java 实现,非 GCM);密钥长度必须 16/24/32 字节。
- RSA 私钥须 base64 编码的 PKCS#8(兼容 PKCS#1 回落);
MinRSAKeySize=1024。 ApiEncrypt()须排在repeatsubmit.RepeatSubmit之前——指纹要用解密后的明文,密文每次随机 AES 密钥会使指纹漂移。 :::
相关页:/pkg-reference/ratelimiter-repeatsubmit、/pkg-reference/config-database-redis、/modules/auth。