XOR 与 RC5:从原理到 Go 实战(含安全替代建议)

XOR 与 RC4:从原理到 Go 实战(含安全替代建议) 副标题 / 摘要 用最少的数学解释 XOR 与 RC4 的工作机制,给出可运行的 Go 示例,并说明 RC4 的安全问题与替代方案。 目标读者 想读懂遗留 RC4 代码的后端工程师 想区分“编码”与“加密”的初学者 需要建立流密码心智模型的中级开发者 背景 / 动机 很多系统仍遗留 RC4 或“自研解密”的逻辑。常见误区是把 Base64 当作加密,或忽视“完整性校验”。理解 XOR 与 RC4,有助于正确评估安全性,并避免把旧方案复制到新系统。 核心概念 XOR(异或):按位运算,可逆 流密码:用伪随机密钥流与明文逐字节 XOR RC4:经典流密码,但已不推荐 Base64:编码,不是加密 完整性:仅加密不等于防篡改 实践指南 / 步骤 接收 Base64 字符串(通常是 RC4 输出) Base64 解码得到原始字节 用共享密钥初始化 RC4 将密钥流与字节逐字节 XOR 把输出按 UTF-8 转为字符串(若是文本) 可运行示例(Go) package main import ( "crypto/rc4" "encoding/base64" "fmt" ) func rc4XOR(key string, data []byte) ([]byte, error) { c, err := rc4.NewCipher([]byte(key)) if err != nil { return nil, err } out := make([]byte, len(data)) c.XORKeyStream(out, data) return out, nil } func encryptToBase64RC4(key, plaintext string) (string, error) { out, err := rc4XOR(key, []byte(plaintext)) if err != nil { return "", err } return base64.StdEncoding.EncodeToString(out), nil } func decryptBase64RC4(key, encoded string) (string, error) { raw, err := base64.StdEncoding.DecodeString(encoded) if err != nil { return "", err } out, err := rc4XOR(key, raw) if err != nil { return "", err } return string(out), nil } func main() { key := "demo-key" plaintext := "hello rc4" enc, _ := encryptToBase64RC4(key, plaintext) dec, _ := decryptBase64RC4(key, enc) fmt.Println(enc) fmt.Println(dec) } 运行: ...

2025年12月16日 · 2 分钟 · map[name:Jeanphilo]