囧次元[1.5.7.9]版本-签名与加密算法解析
本文将深入分析开源项目Go-Jocy中调用外部API时使用的签名验证机制和加密算法,通过通俗易懂的方式讲解其设计思路和实现原理。
项目背景
Go-Jocy是一个基于Go语言和Gin框架开发的高性能二次元视频聚合后端服务。在调用外部视频解析API时,项目实现了一套复杂的签名验证和数据加密机制,确保与第三方服务的安全通信。
外部API签名算法概览
Go-Jocy项目在调用外部API时主要使用了以下几种签名和加密技术:
- MD5双签名机制 - 针对视频播放URL的专用签名
- RSA+AES混合加密 - 保护请求数据的安全传输
- Lua脚本动态解析 - 灵活处理不同API的签名要求
- 时间戳防重放 - 确保请求的时效性
核心签名算法分析
1. 视频播放URL的双签名机制
项目为视频播放URL实现了专门的双签名验证机制:
func MD5PlayUrlSign(jmStr, salt, ts string) string {
combined := jmStr + salt + ts
hash := md5.Sum([]byte(combined))
return hex.EncodeToString(hash[:])
}
签名生成过程:
- 将输入字符串、固定盐值和时间戳拼接
- 对拼接后的字符串进行MD5哈希运算
- 将哈希结果转换为十六进制字符串
2. 双重签名验证策略
在请求外部视频解析API时,系统会生成两个不同的签名:
// 基于应用版本的签名
client.SetHeaderVerbatim("x-sign1", MD5PlayUrlSign(appVersion, salt, ts))
// 基于视频源地址的签名
client.SetHeaderVerbatim("x-sign2", MD5PlayUrlSign(source, salt, ts))
双签名的作用:
- x-sign1:验证客户端应用的合法性
- x-sign2:验证请求视频源的完整性
- 时间戳:防止重放攻击
- 固定盐值:"v50gjcy"作为签名密钥
RSA+AES混合加密机制
1. 请求数据加密流程
项目实现了RSA和AES结合的混合加密方案:
func EncryptRequests(data string) (string, error) {
// 1. 生成16位随机密钥
rsaKey := RandomString(16)
// 2. 反转密钥作为IV向量
rsaIV := ReverseString(rsaKey)
// 3. RSA加密AES密钥
encryptedRSA, err := RsaEncryption(rsaKey)
// 4. AES加密实际数据
encryptedAES, err := AesEncryption(data, rsaKey, rsaIV)
// 5. 组合加密结果
return fmt.Sprintf("%s.%s", encryptedRSA, encryptedAES), nil
}
加密步骤详解:
- 密钥生成:随机生成16位AES密钥
- IV生成:将AES密钥反转作为初始化向量
- RSA加密:使用公钥加密AES密钥
- AES加密:使用AES-CBC模式加密实际数据
- 结果组合:用点号分隔RSA和AES加密结果
Lua脚本动态解析机制
1. 灵活的脚本执行环境
项目支持通过Lua脚本动态处理不同API的签名要求:
func DecryptPlayUrlLUA(luaScript, source, AuthIP string) (any, error) {
// 创建Lua执行环境
L := lua.NewState()
defer L.Close()
// 注册工具函数
L.SetField(L.GetGlobal("utils"), "md5", L.NewFunction(func(L *lua.LState) int {
input := L.ToString(1)
result := MD5Encryption(input)
L.Push(lua.LString(result))
return 1
}))
}
2. 内置工具函数
Lua环境提供了丰富的工具函数:
- utils.md5():MD5哈希计算
- utils.timestamp():获取当前时间戳
- utils.aes128cbc_decrypt():AES解密
- httpGet():HTTP请求发送
开源地址
后端项目地址:https://github.com/nuanxinqing123/go-jocy
前端项目地址:https://github.com/nuanxinqing123/jocy-web-refactoring
阅读剩余
版权声明:
作者:Nuanxinqing
链接:https://6b7.org/687.html
文章版权归作者所有,未经允许请勿转载。
THE END