Go语言如何做RSA加密_Go语言RSA加密解密教程【高效】
RSA加密失败因明文超长:1024位密钥限117字节,2048位限245字节;私钥解析失败多因PKCS#1与PKCS#8格式混淆;解密乱码源于byte转string的UTF-8强制编码;签名验签需确保哈希算法、密钥、数据完全一致。公钥加密失败:panic: crypto/rsa: message too long 是什么鬼?这是最常卡住新手的错误——rsa.EncryptPKCS1v15 直接 panic,不是代码写错,而是明文超长了。RSA 本身不能直接加密长数据,1024 位密钥最多只能加密 117 字节(128 ? 11 padding),2048 位是 245 字节。超过就炸。实操建议:立即学习“go语言免费学习笔记(深入)”;永远别对原始字符串直接调用 rsa.EncryptPKCS1v15,除非你确认长度 ≤ pubKey.Size() - 11分段加密必须手动切片,标准库不帮你做;推荐封装成 RsaPubEncrypt 函数,每次取 pubKey.Size() - 11 字节加密,再拼接如果要和 Java/PHP 互通,务必统一 padding 方式:Go 默认用 PKCS1v15,Java 侧得配 "RSA/ECB/PKCS1Padding",别用 OAEP(默认参数不一致易出错)私钥文件读不出来:failed to parse private key 怎么排?这个错误表面是解析失败,根源八成是密钥格式不匹配。x509.ParsePKCS8PrivateKey 只认 PKCS#8 格式私钥,但 rsa.GenerateKey 默认生成的是 PKCS#1(RSA PRIVATE KEY PEM type),直接传进去就报错。实操建议:立即学习“go语言免费学习笔记(深入)”;生成密钥时,私钥存为 PKCS#8:用 x509.MarshalPKCS8PrivateKey 序列化,PEM block Type 设为 "PRIVATE KEY"读私钥时,先 pem.Decode,再根据 PEM header 判断类型:"RSA PRIVATE KEY" → 用 x509.ParsePKCS1PrivateKey;"PRIVATE KEY" → 用 x509.ParsePKCS8PrivateKey别手动生成或复制粘贴密钥内容——换行、空格、多余回车都会让 pem.Decode 返回 nil block加密后解密乱码:为什么 string(res) 不是原字符串?这不是编码问题,是 Go 的 []byte 和字符串转换隐含陷阱。RSA 解密返回的是原始字节流,如果原数据含非 UTF-8 字符(比如二进制 payload、带 BOM 的文本、加密后的随机字节),string(res) 会强制转成 UTF-8,显示为 或乱码,但字节本身没错。 Trenz AI驱动的社交电商营销平台,专为TikTok Shop设计
