This commit is contained in:
昔念
2026-02-11 11:06:28 +08:00
parent ab1445510a
commit 71a0ae2157
4 changed files with 52 additions and 61 deletions

View File

@@ -293,24 +293,22 @@ func (s *Server) onevent(c gnet.Conn, v []byte) {
}
}
// XORDecryptU 优化后的异或解密:减少内存分配,支持复用缓冲区
func XORDecryptU(encryptedData []byte, key uint32) []byte {
// 边界条件:待解密数据为空,直接返回空
if len(encryptedData) == 0 {
return []byte{}
}
// 1. 将uint32密钥转换为4字节数组关键步骤
// 字节序选择BigEndian大端是AS3/Java等语言的默认二进制处理方式若需小端可改为binary.LittleEndian
keyBytes := make([]byte, 4) // uint32固定占4个字节
binary.BigEndian.PutUint32(keyBytes, key)
keyLen := len(keyBytes) // 固定为4无需额外判断长度
// 预分配密钥字节数组(可全局缓存,避免每次创建
var keyBytes [4]byte // 栈上分配比make更高效
binary.BigEndian.PutUint32(keyBytes[:], key)
keyLen := len(keyBytes)
// 2. 执行异或解密(逻辑与原版本一致,仅密钥来源不同)
// 复用输出缓冲区:如果需要极致性能,可传入外部缓冲区
decrypted := make([]byte, len(encryptedData))
for i, b := range encryptedData {
// 循环复用4字节密钥索引取模i%4
keyIndex := i % keyLen
decrypted[i] = b ^ keyBytes[keyIndex]
decrypted[i] = b ^ keyBytes[i%keyLen]
}
return decrypted